какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ шаблоном фасада ΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°?

Π― Ρ‡ΠΈΡ‚Π°Π» ΠΎΠ±Π° опрСдСлСния, ΠΈ ΠΎΠ½ΠΈ каТутся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² Ρ‡Π΅ΠΌ ΠΈΡ… отличия?

ΠžΠ’Π’Π•Π’Π«

ΠžΡ‚Π²Π΅Ρ‚ 1

Π’ этой Π²ΠΈΠΊΠΈ-страницС Π½Π° страницС Π²ΠΈΠΊΠΈ-страницы содСрТится краткая Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° ΠΎΠ± этом.

«ΠΠ΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ²Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ интСрфСйс ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, фасад ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π±ΠΎΠ»Π΅Π΅ простой ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ простой интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с.»

Π¨Π°Π±Π»ΠΎΠ½ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° просто связываСт Π΄Π²Π° нСсовмСстимых интСрфСйса.

EDIT: Быстрая аналогия шаблона Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° (Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° DVI-to-VGA. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ DVI, Π½ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ старый ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ VGA. Π‘ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ вашСй Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅, оТидаСтся Π²Ρ…ΠΎΠ΄ DVI ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный Π²Ρ…ΠΎΠ΄ VGA, Π²Ρ‹ смоТСтС Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой старый ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΎΠ²ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ.

ΠžΡ‚Π²Π΅Ρ‚ 2

АдаптСр == ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΡˆΡ‚ΠΈΡ„Ρ‚ Π² ΠΊΡ€ΡƒΠ³Π»ΠΎΠ΅ отвСрстиС.

Facade == ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ панСль управлСния для запуска всСх Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠžΡ‚Π²Π΅Ρ‚ 3

Π¨Π°Π±Π»ΠΎΠ½ Facade ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π±ΠΎΠ»Π΅Π΅ простой интСрфСйс (ΠΈ, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡƒΡ‚Π΅ΠΌ обСртывания классов-Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»Π΅ΠΉ.) Π’Ρ‹ Π½Π΅ сказали Π±Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ фасад, ΠΊΠΎΠ³Π΄Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс нСсовмСстим, просто ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, ΠΌΠ΅Π½Π΅Π΅ ΠΏΠ»ΠΎΡ…ΠΎ спроСктированным ΠΈ Ρ‚.Π΄.

ΠžΡ‚Π²Π΅Ρ‚ 4

Ѐасад ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слуТб Π·Π° СдинствСнным шлюзом слуТбы. АдаптСр ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для прСдоставлСния возмоТности использования извСстного интСрфСйса для доступа ΠΊ нСизвСстному.

ΠžΡ‚Π²Π΅Ρ‚ 5

Ѐасад:

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹: (ΠΈΠ· journaldev ΡΡ‚Π°Ρ‚ΡŒΠΈ ПанкадТа ΠšΡƒΠΌΠ°Ρ€Π°)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов фасадов:

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

АдаптСр:

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов АдаптСра:

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π΅ Π² этом сообщСнии SE:

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ отличия:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΡΡ‚Π°Ρ‚ΡŒΡŽ sourcemaking, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ.

ΠžΡ‚Π²Π΅Ρ‚ 6

Ѐасад ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ контрастируСт с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ.

ΠžΡ‚Π²Π΅Ρ‚ 7

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ сходства ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими шаблонами. Но я Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π» это Ρ‚Π°ΠΊ:

ΠžΡ‚Π²Π΅Ρ‚ 8

Π― ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ это простыми словами, Π±Π΅Π· большой Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ классы Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Ѐасад ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для прСдоставлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· слоя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ слой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π½Π΅ Π·Π½Π°Π» ΠΎ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ классах Π΄ΠΎΠΌΠ΅Π½Π°, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ фасада. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вмСсто Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² классах Π΄ΠΎΠΌΠ΅Π½Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· фасада, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Π²Ρ‹Π·ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.

ΠžΡ‚Π²Π΅Ρ‚ 9

фасад это простота

Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ совмСстимости.

ΠžΡ‚Π²Π΅Ρ‚ 10

Π¨Π°Π±Π»ΠΎΠ½ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° позволяСт Π΄Π²ΡƒΠΌ, Ρ€Π°Π½Π΅Π΅ нСсовмСстимым интСрфСйсам Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π˜ΠΌΠ΅Π΅Ρ‚ 2 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… интСрфСйса Π² ΠΈΠ³Ρ€Π΅.

Π¨Π°Π±Π»ΠΎΠ½ Facade ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ извСстный интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π½ΠΈΠ·ΠΊΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ/мСлкозСрнистым, ΠΈ ΠΎΠ±Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ/ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ зСрнистым интСрфСйсом. Π˜ΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ ΠΏΡƒΡ‚Π΅ΠΌ пСрСноса Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠžΡ‚Π²Π΅Ρ‚ 11

АдаптСр ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΄Π²Π° интСрфСйса.

Ѐасад выставляСт ΠΎΠ΄ΠΈΠ½ класс Π½Π° Π±ΠΎΠ»Π΅Π΅ высокий ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. НапримСр, фасад ΠΌΠΎΠ΄Π΅Π»ΠΈ прСдставлСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ свойства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния класса Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня.

ΠžΡ‚Π²Π΅Ρ‚ 12

Π― Ρ‡ΠΈΡ‚Π°Π» ΠΎΠ±Π° опрСдСлСния, ΠΈ ΠΎΠ½ΠΈ каТутся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Adapter ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ являСтся Stategy, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ слово Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

НапримСр, Π² Zend Framework всС классы Adapter фактичСски ΡΠ²Π»ΡΡŽΡ‚ΡΡ рСализациями шаблона Strategy, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСносят собствСнный ΠΊΠΎΠ΄ Π·Π° классами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² повСдСния.

АдаптСры часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для пСрСноса старого ΠΈΠ»ΠΈ старого ΠΊΠΎΠ΄Π°.

ΠžΡ‚Π²Π΅Ρ‚ 13

Ѐасад

АбстрагируСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простой интСрфСйс. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ОБ абстрагируСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ оборудования. Или языки программирования высокого уровня (Python/JavaScript) Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с языком Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня (C).

Π°Π΄Π°ΠΏΡ‚Π΅Ρ€

ΠžΡ‚Π²Π΅Ρ‚ 14

Π¨Π°Π±Π»ΠΎΠ½ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° связываСт Π΄Π²Π° нСсовмСстимых интСрфСйса, прСдоставляя Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс.

Π¨Π°Π±Π»ΠΎΠ½ фасада ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ подсистСму (ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²) с ΠΎΠ΄Π½ΠΈΠΌ интСрфСйсом.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

What is the difference between the Facade and Adapter Pattern?

I’ve been reading both definitions and they seem quite the same. Could anyone point out what are their differences?

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

16 Answers 16

The Facade Pattern wiki page has a brief note about this.

«An Adapter is used when the wrapper must respect a particular interface and must support a polymorphic behavior. On the other hand, a facade is used when one wants an easier or simpler interface to work with.»

The Adapter pattern just links two incompatible interfaces.

EDIT: A quick analogy for the Adapter pattern (based on the comments) might be something like a DVI-to-VGA adapter. Modern video cards are often DVI, but you’ve got an old VGA monitor. With an adapter that plugs into your video card’s expected DVI input, and has its own VGA input, you’ll be able to get your old monitor working with your new video card.

Adapter == making a square peg fit into a round hole.

Facade == a single control panel to run all the internal components.

Facade:

Key takeaways : ( from journaldev article by Pankaj Kumar)

Facade class diagram:

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

Adapter:

Class diagram of Adapter:

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

You can find more details about Adapter in this SE post:

Key differences:

Have a look at sourcemaking article too for better understanding.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

The Facade pattern is used when a simpler interface is wanted (and again, could be implemented the same way by wrapping the offending classes.) You wouldn’t say you’re using a facade when the existing interface is incompatible, just when you need to make it more readable, less poorly-designed, etc.

facade is simplicity

adapter is interoperability.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

A facade is designed to organize multiple services behind a single service gateway. An adapter is designed to provide a way to use a known interface to access an unknown one.

Facade is usually contrasted with Adapter.

FacadeAdapter
Simplifies multiple complex components with single interfaceProvides differnet interface for an interface
Works with multiple componentsWorks with single component
Control panel is an exampleA power adapter is an example
High-level interfaceLow-level interface

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

As usual, there exist similarities between several patterns. But I would see it like this:

I’ll try to explain this in plain words, without much formality.

Imagine you’ve got some domain classes and from the UI you want to interact with them. A facade can be used to provide functions that can be called from the UI layer so that the UI layer doesn’t know about any domain classes other than the facade. That means instead of calling the functions in the domain classes you call a single function from the facade, which will be responsible of calling the needed functions from the other classes.

Adapter pattern allows two,previously incompatible, interfaces to work with each other. Has 2 separate interfaces in play.

The Facade pattern takes a known interface, that is low level/fine grained, and wraps it with a higher level/course grained interface. Has a single interface, that has been simplified by wrapping with another.

Adapter makes two interfaces work together.

Facade exposes a single class to a higher, and more limited level. For example, a view model facade may only expose certain read only properties of a lower level class.

Adapter pattern links two incompatible interfaces by providing a new interface.

Facade pattern simplifies a complex subsystem(having multiple components) with a single interface.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

Facade

Abstracts complexity to provide a simpler interface. Say for example, an computer OS abstracts the complexity of underlying hardware. Or a high-level programing languages(Python/JavaScript) abstracts complexity when compared to a low-level language(C).

Adapter

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

The main goal of the Facade pattern is to make the class or subsystem easier to use, while the main goal of the Adapter pattern is to adjust the interface to what the client expects.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

The difference between these two patterns is clear, but not in the realm of Design Patterns, but Domain Modeling. In the following, I’ll explain why.

First, I want to reiterate others have said here, and then I’ll add the note:

A Facade is an interface to a subsystem (an external or a legacy system) that simplifies the access for the client (us). Facade hides the interface of the other subsystem (aggregate some calls, or hide some APIs that we don’t need), thus your client only accesses that subsystem through this Facade.

On the other hand, an Adapter is a wrapper around another service or object. It makes the wrapped object conform to a standard interface that the client expects. Let’s say there is a method on the «Ledger» object, which you need to make a tweak (change its parameters, change its name, etc.). You can wrap it with an adapter.

Now, still the difference might not be clear. That’s where I want to bring up the key difference between these two patterns leaving no room for further confusion:

Facade doesn’t changes the domain model of the other subsystem, while Adapter does. This is the key difference. Period.

That’s why you combine these two when you create an Anticorruption Layer. Let’s say you have subsystem which you want to use, but you don’t want its domain model to muddle your domain model. What would you do? You’d create an Anticorruption Layer. How? You first create a Facade, that simplifies accessing the interface for the subsystem, and then adapters for the domain objects used in that interface (remember the facade still holds the domain model for the other subsystem), so it conforms to your model.

Many design patterns can be used in domain modeling. This is true for Facade and Adapter design patterns, as well. Although the difference between these two patterns might not be clear in «design pattern» realm, it’s more clear in «domain modeling» realm.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ВСрнСмся ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ структурных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² проСктирования. На этот Ρ€Π°Π· ΠΌΡ‹ рассмотрим шаблон проСктирования ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Adapter (Π΅Π³ΠΎ Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Wrapper Π½Π° ряду с ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ Facade).

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

Object Adapter

Object Adapter достигаСт своСй Ρ†Π΅Π»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅, прСдставлСнной Π½ΠΈΠΆΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс TargetInterface. Для этого создаСтся класс ObjectAdapter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс TargetInterface, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Adaptee. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° targetMethod Ρƒ АдаптСра, осущСствляСтся Π²Ρ‹Π·ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρƒ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ интСрфСйса.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

Π’ самом простом случаС рСализация ObjectAdapter Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ:

Плюс Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ отдСляСм клиСнтский интСрфСйс ΠΎΡ‚ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ интСрфСйса.

Class Adapter

Π’ случаС с Class Adapter’ΠΎΠΌ, для достиТСния нашСй Ρ†Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мноТСствСнноС наслСдованиС. Наш ClassAdapter наслСдуСтся ΠΎΡ‚ клиСнтского интСрфСйса ΠΈ ΠΎΡ‚ АдаптируСмого интСрфСйса. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Java Π½Π΅Ρ‚ мноТСствСнного наслСдования, Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ абстрактным/ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ классом. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ интСрфСйсом, Ρ‡Ρ‚ΠΎ Π½Π΅ всСгда ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter. Π€ΠΎΡ‚ΠΎ какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ facade ΠΈ adapter

А Π²ΠΎΡ‚ ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ рСализация класса ClassAdapter:

Π₯ΠΎΡ‡Ρƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ сигратур ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρƒ Object Adapter Π½Π΅Ρ‚.

Class Adapter считаСтся Π±ΠΎΠ»Π΅Π΅ простым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π² случаС ΠΊΠΎΠ³Π΄Π° Π½Π΅ трСбуСтся ТСсткого раздСлСния клиСнтского ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ интСрфСйсов.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ АдаптСром ΠΈ Ѐасадом

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ…ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько слов ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Ѐасад, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ ΠΈ АдаптСр являСтся Wrapper’ΠΎΠΌ. Facade опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ АдаптСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы.

НС стоит ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Ѐасад ΠΈ АдаптСр Ρ‚Π°ΠΊ: ΠΌΠΎΠ», Ѐасад ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ нСсколько классов, Π° АдаптСр Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½. ΠžΡ‡Π΅Π½ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ АдаптСр понадобится для Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ѐасад придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для упрощСния всСго лишь ΠΎΠ΄Π½ΠΎΠ³ΠΎ комплСксного класса. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° этих Π΄Π²ΡƒΡ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Π½Π΅ Π² количСствС ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… сущностСй, Π° Π² Ρ‚ΠΎΠΌ, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ это Π΄Π΅Π»Π°ΡŽΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования АдаптСра Π² JDK

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ InputStreamReader ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ InputStream ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π² Reader.

ПозТС Π²Ρ‹Π»ΠΎΠΆΡƒ ΠΊΠΎΠ΄ использования АдаптСров ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» участиС, Π° ΠΏΠΎΠΊΠ° ΠΆΠ΄Ρƒ Π²Π°ΡˆΠΈΡ… вопросов ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π£Π΄Π°Ρ‡ΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ фасадом ΠΈ шаблоном Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°?

Π― Ρ‡ΠΈΡ‚Π°Π» ΠΎΠ±Π° опрСдСлСния, ΠΈ ΠΎΠ½ΠΈ каТутся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² Ρ‡Π΅ΠΌ ΠΈΡ… различия?

На страницС Facade Pattern wiki Π΅ΡΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎΠ± этом.

«ΠΠ΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Π”ΠΎΠ»ΠΆΠ½Π° ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс И Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ ПовСдСниС. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, фасад Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ простой интСрфСйс для Ρ€Π°Π±ΠΎΡ‚Ρ‹. «

Π¨Π°Π±Π»ΠΎΠ½ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° просто связываСт Π΄Π²Π° нСсовмСстимых интСрфСйса.

EDIT: Быстрая аналогия с шаблоном Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° (Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²) ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊ DVI-VGA. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ часто DVI, Π½ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ старый ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ VGA. Благодаря Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡƒ Π²Ρ…ΠΎΠ΄Ρƒ DVI вашСй Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный Π²Ρ…ΠΎΠ΄ VGA, Π²Ρ‹ смоТСтС Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ свой старый ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΎΠ²ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ.

АдаптСр == для установки ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»Ρ‹ΡˆΠΊΠ° Π² ΠΊΡ€ΡƒΠ³Π»ΠΎΠ΅ отвСрстиС.

Ѐасад == Сдиная панСль управлСния для запуска всСх Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π¨Π°Π±Π»ΠΎΠ½ «Ѐасад» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π±ΠΎΠ»Π΅Π΅ простой интСрфСйс (ΠΈ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, оборачивая Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ классы.) Π’Ρ‹ Π±Ρ‹ Π½Π΅ сказали, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ фасад, ΠΊΠΎΠ³Π΄Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс нСсовмСстим, просто ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΌ ΠΈ Ρ‚. Π΄.

Ѐасад:

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹: (ΠΎΡ‚ journaldev ΡΡ‚Π°Ρ‚ΡŒΡ ПанкадТа ΠšΡƒΠΌΠ°Ρ€Π°)

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов фасадов:

АдаптСр:

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов АдаптСра:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π΅ Π² этом сообщСнии SE:

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ отличия:

ВзглянитС Π½Π° sourcemaking article Ρ‚ΠΎΠΆΠ΅ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания.

Ѐасад ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСрвисов Π·Π° ΠΎΠ΄Π½ΠΈΠΌ сСрвисным шлюзом. АдаптСр ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования извСстного интСрфСйса для доступа ΠΊ нСизвСстному.

Ѐасад ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ контрастируСт с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ.

Π― ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ это простыми словами, Π±Π΅Π· особой Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ классы ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Ѐасад ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для прСдоставлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· уровня ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π½Π΅ Π·Π½Π°Π» Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΈΡ… классах Π΄ΠΎΠΌΠ΅Π½Π°, ΠΊΡ€ΠΎΠΌΠ΅ фасада. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вмСсто Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² классах Π΄ΠΎΠΌΠ΅Π½Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· фасада, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Π²Ρ‹Π·ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ сходства ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ. Но я Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π» это Ρ‚Π°ΠΊ:

Π¨Π°Π±Π»ΠΎΠ½ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° позволяСт Π΄Π²ΡƒΠΌ, Ρ€Π°Π½Π΅Π΅ нСсовмСстимым интСрфСйсам, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π˜ΠΌΠ΅Π΅Ρ‚ 2 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… интСрфСйса Π² ΠΈΠ³Ρ€Π΅.

Π¨Π°Π±Π»ΠΎΠ½ Facade Π±Π΅Ρ€Π΅Ρ‚ извСстный интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ/мСлкозСрнистым, ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ интСрфСйсом Π±ΠΎΠ»Π΅Π΅ высокого уровня/мСлкозСрнистого. Π˜ΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ Π·Π° счСт пСрСноса Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

АдаптСр заставляСт Π΄Π²Π° интСрфСйса Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ вмСстС.

Ѐасад выставляСт ΠΎΠ΄ΠΈΠ½ класс Π½Π° Π±ΠΎΠ»Π΅Π΅ высокий ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. НапримСр, фасад ΠΌΠΎΠ΄Π΅Π»ΠΈ прСдставлСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ свойства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния класса Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Integralist / Design Patterns: Adapter vs Facade vs Bridge.md

The three design patterns (Adapter, Facade and Bridge) all produce the result of a clean public API. The difference between the patterns are usually due to a subtle context shift (and in some cases, a behavioural requirement).

The primary function of an Adapter is to produce a unified interface for a number of underlying and unrelated objects.

You will notice this pattern being utilised in many applications. For example, ActiveRecord (the popular Ruby ORM; object-relational mapping) creates a unified interface as part of its API but the code underneath the interface is able to communicate with many different types of databases. Allowing the consumer of the API to not have to worry about specific database implementation details.

The principle structure of this pattern is:

The primary function of a Facade is to simplify the interaction between a consumer and an interface.

Most DSL’s are a facade of some form. The popular jQuery library consists of multiple facades (one for each type of feature). For example, the jQuery ajax method makes it very easy to make an XHR ( XMLHttpRequest ).

The difference between a Facade and an Adapter is that the Facade makes a simple abstraction, where as an Adapter will handle complex interactions by taking incoming data and constructing it to work with the underlying objects.

The primary function of a Bridge is to decouple an abstraction from its implementation.

Adapter makes things work after they’re designed
Bridge makes them work before they are

Imagine you have a function that abstracts the implementation detail of making an HTTP request to an external API endpoint. In a language like JavaScript you might tightly couple the abstraction with the consumer code.

The above abstraction (i.e. the get function) will only ever work within the context of a web browser. The abstraction has been tightly coupled to the consumer.

Utilising a bridge will allow us to decouple this code:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *