ΠΊΠ°ΠΊΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌΠΈ facade ΠΈ adapter
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΡΠ°ΡΠ°Π΄Π° ΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠ°?
Π― ΡΠΈΡΠ°Π» ΠΎΠ±Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΈ ΠΎΠ½ΠΈ ΠΊΠ°ΠΆΡΡΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ. ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΡ, Π² ΡΠ΅ΠΌ ΠΈΡ ΠΎΡΠ»ΠΈΡΠΈΡ?
ΠΠ’ΠΠΠ’Π«
ΠΡΠ²Π΅Ρ 1
Π ΡΡΠΎΠΉ Π²ΠΈΠΊΠΈ-ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π²ΠΈΠΊΠΈ-ΡΡΡΠ°Π½ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΊΡΠ°ΡΠΊΠ°Ρ Π·Π°ΠΌΠ΅ΡΠΊΠ° ΠΎΠ± ΡΡΠΎΠΌ.
«ΠΠ΄Π°ΠΏΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π°ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΡΠ°Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ.»
Π¨Π°Π±Π»ΠΎΠ½ Π°Π΄Π°ΠΏΡΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄Π²Π° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
EDIT: ΠΡΡΡΡΠ°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π°Π΄Π°ΠΏΡΠ΅ΡΠ° (Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π²) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ Π°Π΄Π°ΠΏΡΠ΅ΡΠ° DVI-to-VGA. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ ΡΠ°ΡΡΠΎ ΡΠ²Π»ΡΡΡΡΡ DVI, Π½ΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΠ°ΡΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ VGA. Π‘ Π°Π΄Π°ΠΏΡΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ΅, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π²Ρ ΠΎΠ΄ DVI ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²Ρ ΠΎΠ΄ VGA, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠΎΠΉ.
ΠΡΠ²Π΅Ρ 2
ΠΠ΄Π°ΠΏΡΠ΅Ρ == ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΡΡΠΈΡΡ Π² ΠΊΡΡΠ³Π»ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠΈΠ΅.
Facade == ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΡΠ²Π΅Ρ 3
Π¨Π°Π±Π»ΠΎΠ½ Facade ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (ΠΈ, ΠΎΠΏΡΡΡ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²-Π½Π°ΡΡΡΠΈΡΠ΅Π»Π΅ΠΉ.) ΠΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π»ΠΈ Π±Ρ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ°ΡΠ°Π΄, ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ, ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ, ΠΌΠ΅Π½Π΅Π΅ ΠΏΠ»ΠΎΡ ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈ Ρ.Π΄.
ΠΡΠ²Π΅Ρ 4
Π€Π°ΡΠ°Π΄ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ»ΡΠΆΠ± Π·Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ»ΡΠ·ΠΎΠΌ ΡΠ»ΡΠΆΠ±Ρ. ΠΠ΄Π°ΠΏΡΠ΅Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΌΡ.
ΠΡΠ²Π΅Ρ 5
Π€Π°ΡΠ°Π΄:
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ: (ΠΈΠ· journaldev ΡΡΠ°ΡΡΠΈ ΠΠ°Π½ΠΊΠ°Π΄ΠΆΠ° ΠΡΠΌΠ°ΡΠ°)
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ°ΡΠ°Π΄ΠΎΠ²:
ΠΠ΄Π°ΠΏΡΠ΅Ρ:
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΠ΄Π°ΠΏΡΠ΅ΡΠ°:
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°Π΄Π°ΠΏΡΠ΅ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ 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?
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:
Adapter:
Class diagram of Adapter:
You can find more details about Adapter in this SE post:
Key differences:
Have a look at sourcemaking article too for better understanding.
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.
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.
Facade | Adapter |
---|---|
Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
Works with multiple components | Works with single component |
Control panel is an example | A power adapter is an example |
High-level interface | Low-level interface |
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
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
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.
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 Ρ ΠΠ΄Π°ΠΏΡΠ΅ΡΠ°, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ Π°Π΄Π°ΠΏΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π ΡΠ°ΠΌΠΎΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ObjectAdapter Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠΉ:
ΠΠ»ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΡ Π°Π΄Π°ΠΏΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Class Adapter
Π ΡΠ»ΡΡΠ°Π΅ Ρ Class Adapter’ΠΎΠΌ, Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ°Ρ ClassAdapter Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΠΎΡ ΠΠ΄Π°ΠΏΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Java Π½Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ/ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ. ΠΡΠΎΡΠΎΠΉ ΠΏΡΠ΅Π΄ΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ.
Π Π²ΠΎΡ ΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° 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: