Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования PHP. Π§Π°ΡΡ‚ΡŒ 1. ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅

Π’Π΅ΠΌΠ° заСзТСнная Π΄ΠΎ Π΄Ρ‹Ρ€, Π½Π΅ ΡΠΏΠΎΡ€ΡŽβ€¦ ВСроятно, для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² моя ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Π»ΠΎ, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Π°. Π― Π±Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π΅Ρ‘ ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» ΠΎΡΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ΄Ρƒ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ созрСл для вникания Π² это Π΄Π°Π»Ρ‘ΠΊΠΎΠ΅ понятиС – Β«ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹Β». По сСбС помню, Ρ‡Ρ‚ΠΎ довольно Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя я путался Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ…, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ Π½Π΅ понимая, Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. ИмСнно этот Ρ„Π°ΠΊΡ‚ стал основой для ΠΌΠΎΠ΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² Π½Π΅ΠΉ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Они Π±ΡƒΠ΄ΡƒΡ‚ абстрактными ΠΈ максимально простыми. Однако я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ контСкстС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ наглядно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ отличия ΠΈΡ… использования Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ситуации. Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ классы лишним Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, какая ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ нСпосрСдствСнноС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. Π“Π»Π°Π²Π½Ρ‹ΠΌΠΈ гСроями ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² станут Factory (Ρ„Π°Π±Ρ€ΠΈΠΊΠ°) ΠΈ Product (ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΎΠΉ). Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ это ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ умСстно, Π½ΠΎ Π·Π°Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ наглядно…

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° нСсколько частСй. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ я Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Π½ΠΎΠ²ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ шаблонов проСктирования. ВсСм, ΠΊΠΎΠ³ΠΎ эта Ρ‚Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования

Π‘ вашСго позволСния, я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° сотый Ρ€Π°Π·, ΠΊΡ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅, эти ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹β€¦ Π― просто ΠΎΡΡ‚Π°Π²Π»ΡŽ здСсь ссылку Π½Π° википСдию. ΠšΡ€Π°Ρ‚ΠΊΠΎΡΡ‚ΡŒ – сСстра Ρ‚Π°Π»Π°Π½Ρ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сразу ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

РССстр (Registry)

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ с этого шаблона. Он Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ выбиваСтся ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ ряда, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ являСтся ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ, Π½ΠΎ Π² дальнСйшСм Π½Π°ΠΌ потрСбуСтся Π΅Π³ΠΎ Π·Π½Π°Π½ΠΈΠ΅. Π˜Ρ‚Π°ΠΊ, рССстр – это Ρ…ΡΡˆ, доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

НСрСдко ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ рССстры, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы ArrayAccess ΠΈ/ΠΈΠ»ΠΈ Iterator, Π½ΠΎ Π½Π° ΠΌΠΎΠΉ взгляд, это лишнСС. ОсновноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ рССстра – Π² качСствС бСзопасной Π·Π°ΠΌΠ΅Π½Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

ΠŸΡƒΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Object pool)

Π­Ρ‚ΠΎΡ‚ шаблон, ΠΏΠΎ сути, являСтся частным случаСм рССстра. ΠŸΡƒΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² – это Ρ…ΡΡˆ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π΄ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Ρ‚ΡƒΠ΄Π° ΠΏΡ€ΠΈ нСобходимости:

ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° (Singleton)

НавСрноС, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных шаблонов. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΅Π³ΠΎ всС Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. А Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΈ поискС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎ Π½Π΅Π³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΡΡ‚ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π½Π° собСсСдованиях. Π’ΠΎΡ‚ самый простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ синглтона прост, ΠΊΠ°ΠΊ ΠΏΡΡ‚ΡŒ ΠΊΠΎΠΏΠ΅Π΅ΠΊ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ сущСствованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра класса Product, ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π»ΠΈ всС магичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для создания экзСмпляра класса, клонирования ΠΈ сСриализации. ЕдинствСнный Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ – Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ статичСским ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Product::getInstance(). ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ класс сам создаст экзСмпляр сСбя ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ Π΅Π³ΠΎ Π² статичСскоС свойство Product::$instance. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… обращСниях, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… выполнСния скрипта, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅, Ρ€Π°Π½Π΅Π΅ созданный, экзСмпляр класса.

ΠŸΡƒΠ» ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π΅ΠΊ (Multiton)

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ захочСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… синглтонов Π² своём ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π’ΠΎΠ³Π΄Π°, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, стоит ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ шаблона ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠΊΡ€Π΅ΡΡ‚ΠΈΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Β«ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ°Β» ΠΈ Β«ΠŸΡƒΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²Β»:

Π˜Ρ‚Π°ΠΊ, для добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ класса-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ Π½Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ класса Factory. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создали Π΄Π²Π° Ρ‚Π°ΠΊΠΈΡ… класса ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих классов свой СдинствСнный экзСмпляр.

Π― Π½Π΅ случайно Ρ€Π°Π·Π±ΠΈΠ» ΠΎΠ±Ρ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π½Π° Π΄Π²Π° абстрактных класса. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТним ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Позволим ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСсколько ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π΅ΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ORM, позволяя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΠΊΠ° Π΅Ρ‰Ρ‘ Π½Π΅ слишком ΠΏΠΎΠ·Π΄Π½ΠΎ, Π²Π΅Ρ€Π½Ρƒ ΠΌΠ΅Ρ‡Ρ‚Π°Ρ‚Π΅Π»Π΅ΠΉ с нСбСс Π½Π° зСмлю. Π¨Π°Π±Π»ΠΎΠ½ ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Π±Ρ€Π°Ρ‚ΡŒΡ, нСсомнСнно, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Π½ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈ Π»Π΅ΠΏΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈ Π³Π΄Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Напомню (ΠΈΠ»ΠΈ повСдаю), Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, Β«ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π΅ΡΡ‚Π²ΠΎΒ» (Singletonitis), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ Ρ€Π°Π· Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² нСумСстном использовании синглтонов. Π’Π°ΠΊ для Ρ‡Π΅Π³ΠΎ ΠΆΠ΅ Π½Π°ΠΌ этот шаблон? Π‘Π°ΠΌΡ‹ΠΉ распространённый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ создаётся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° протяТСнии Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта. А Π΅Ρ‰Ρ‘ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… рССстр Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ ΠΊΠ°ΠΊ класс со статичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Factory method)

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ градус ΠΈ снова Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ истокам. Допустим, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, производящиС ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ свой ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Нам Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π΄Π΅Π»Π°Π΅Ρ‚ этот ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Π½ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ любой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ:

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ getProduct() являСтся Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ.

Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° (Abstract Factory)

Π‘Ρ‹Π²Π°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Ρ„Π°Π±Ρ€ΠΈΠΊ ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· Ρ„Π°Π±Ρ€ΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ΡƒΡ‚-Ρ‚ΠΎ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ этот шаблон.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π½Π°ΠΌ Π½Π΅ приходится заботится ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π²Π·ΡΡ‚ΡŒ. Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° сама провСряСт настройки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. РазумССтся, вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„Π°ΠΉΠ»Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π›ΠΎΠ³ΠΈΠΊΠ° Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой.

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ инициализация (Lazy Initialization)

А Π²ΠΎΡ‚ Π²Π°ΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° интСрСсная ситуация. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΠ°, Π½ΠΎ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, какая Ρ‡Π°ΡΡ‚ΡŒ Π΅Ρ‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Π²Π°ΠΌ потрСбуСтся, Π° какая – Π½Π΅Ρ‚. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ выполнятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·:

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ„Π°Π±Ρ€ΠΈΠΊΠ° создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ сохраняСт Π΅Π³ΠΎ Π² сСбя. ΠŸΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Если Π±Ρ‹ ΠΌΡ‹ Π½Π΅ Π²Ρ‹Π·Π²Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹ Π½Π΅ создался вовсС. ΠŸΡ€ΠΈΠ·Π½Π°ΡŽ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ°Π»ΠΎ смысла. Π—Π΄Π΅ΡΡŒ использованиС этого шаблона Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ. Π― просто Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ смысл. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТных вычислСний, ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π° ΠΈ рСсурсов ΠΊΡƒΡˆΠ°Π΅Ρ‚ массу. Π’Π΅ΡΡŒΠΌΠ° Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠΎΠ²ΠΎΠ΄ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот шаблон.

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ (Prototype)

НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ приходится ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. Π•ΡΡ‚ΡŒ смысл ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π° ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, особСнно, Ссли инициализация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ рСсурсов. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ – это Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ сохранённый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ случаС нСобходимости ΠΎΠ½ клонируСтся:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ создали Π΄Π²Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ (Builder)

Ну ΠΈ послСдний Π½Π° сСгодня шаблон – ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ. Он ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ созданиС слоТного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠœΡ‹ просто расскаТСм Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅, ΠΊΠ°ΠΊΠΎΠΌΡƒ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŽ Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ созданиС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°:

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ рассмотрСли 9 шаблонов проСктирования. Π­Ρ‚ΠΎ довольно длинная ΡΡ‚Π°Ρ‚ΡŒΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ вашС ΠΌΠ½Π΅Π½ΠΈΠ΅. Π•ΡΡ‚ΡŒ Π»ΠΈ смысл Π² ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈ стоит Π»ΠΈ ΠΌΠ½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», рассказав ΠΎ структурных ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… повСдСния?

Π’Π΅ΡΡŒ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅.

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

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования

ВсС Ρ‡Π°Ρ‰Π΅ ΠΈ Ρ‡Π°Ρ‰Π΅ я ΡΠ»Ρ‹ΡˆΡƒ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Ρ‡ΠΈΡ‚Π°ΡŽ Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ…, Ρ‡Ρ‚ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования (ΠΎΠ½ΠΈ ΠΆΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹) Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Мол, ΠΎΠ½ΠΈ появились Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° «цвСтСния» UML, RUP, CASE систСм ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… чСрСсчур «слоТных» инструмСнтов, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ. А сСйчас самоС Π²Π°ΠΆΠ½ΠΎΠ΅ β€” это ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Π΄Π° побыстрСС. На ΡƒΠΌΠ½Ρ‹Π΅ толстыС ΠΊΠ½ΠΈΠΆΠΊΠΈ Π½ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ для прохоТдСния собСсСдования. Π’Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

НСмного воспоминаний ΠΈΠ· молодости

Когда я учился Π² унивСрситСтС, Π½Π°ΠΌ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π»ΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· курсов ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования. На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ΠΈ казались ΠΌΠ½Π΅ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ сфСричСского коня Π² Π²Π°ΠΊΡƒΡƒΠΌΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ практичСского ΠΎΠΏΡ‹Ρ‚Π° ΠΈΡ… примСнСния я Π½Π΅ ΠΈΠΌΠ΅Π» (это Π±Ρ‹Π» Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»ΠΎ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ³ΠΎ курса ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄). Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΊΡ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΊΡ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ достаточно слоТно, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ тонкостях ΠΈ дСталях. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, вопросы ΠΏΠΎ шаблонам проСктирования Π·Π°Π΄Π°Π²Π°Π»ΠΈ Π² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ порядкС Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ собСсСдовании Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠšΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒ Ρ‰Π΅ΠΊΠΈ ΠΈ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ (особСнно Singleton), видя ΠΈΡ… Π² ΠΆΠΈΠ·Π½ΠΈ максимум Ρ€Π°Π·-Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π° страницах ΠΊΠ½ΠΈΠΆΠ΅ΠΊ.

Но вСдь совсСм Π½Π΅ Π³Π»ΡƒΠΏΡ‹Π΅ люди ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования:

Π”Π°Π»ΡŒΡˆΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ историчСскиС Ρ…Ρ€ΠΎΠ½ΠΈΠΊΠΈ смысла Π½Π΅Ρ‚. Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° пСрвая ΠΊΠ½ΠΈΠ³Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нашС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€ΠΏΠ°Π»ΠΎ свои знания ΠΏΠΎ шаблонам проСктирования ΠΈ ΠΏΡ‹Ρ‚Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅. Она считаСтся классикой Π² этой Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π° ΠΊ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ.

Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ я Π½Π°Ρ‡Π°Π» Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ тСорСтичСскиС знания шаблонов проСктирования ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΌΠ½Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡ΡƒΠΆΠΎΠΉ ΠΊΠΎΠ΄ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС. А это особСнно Π²Π°ΠΆΠ½ΠΎ Π½Π° стартС вашСй ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π²Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π· ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. НапримСр, встрСчая класс с суффиксом Builder, я ΠΏΠΎΠ½ΠΈΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ с Ρ†Π΅Π»ΡŒΡŽ упрощСния ΠΈ изоляции Π»ΠΎΠ³ΠΈΠΊΠΈ построСния слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π― сразу Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ» ΠΊΠ°ΠΊ ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² своСм ΠΊΠΎΠ΄Π΅. ΠŸΠΎΠ²ΡΡŽΠ΄Ρƒ Π±Ρ‹Π»ΠΈ разбросаны прСдставитСли шаблона Singleton, ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊ Π»Π΅Π³ΠΊΠΎ Π±Π΅Π· Π·Π½Π°Π½ΠΈΠΉ ΠΏΡ€Π°Π²ΠΈΠ» примСнСния. Π’ ΠΊΠΎΠ΄Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я Ρ€Π°Π±ΠΎΡ‚Π°Π», обильно Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Facade, Visitor, Chain of Responsibility, Iterator, Adapter, Decorator, Proxy, Strategy, Template Method ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ популярныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования.

Π― осознал, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ я экономлю, примСняя свои скудныС ΠΊΠ½ΠΈΠΆΠ½Ρ‹Π΅ знания шаблонов проСктирования ΠΈ Π΄Π°ΠΆΠ΅ Π² Π΄ΡƒΡˆΠ΅ Π·Π°ΡƒΠ²Π°ΠΆΠ°Π» ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ². МнС Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‡ΡƒΠΆΠΎΠΉ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π΅Π³ΠΎ своими Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅.

А как бСз шаблонов?

ВрСмя ΡˆΠ»ΠΎβ€¦ Π― достаточно быстро ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ ΠΊ повсСмСстному ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ шаблонов проСктирования ΠΈ ΠΌΠ½Π΅ стало слоТно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· Π½ΠΈΡ…. Π― Π½Π°Ρ‡Π°Π» ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ для Ρ‡Π΅Π³ΠΎ Π½Π° собСсСдовании Ρƒ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ ΠΎ Π½ΠΈΡ… (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли Π½Π΅ просто «для Π³Π°Π»ΠΎΡ‡ΠΊΠΈΒ»). Π’ΡƒΡ‚ Ρ€Π΅Ρ‡ΡŒ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ± ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ шаблонов проСктирования, Π° ΠΎΠ± ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΈ общСния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. А это Ρ‚ΠΎΡ‚ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ мСсто Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ β€” обсуТдСниС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” это врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ тратится Π½Π° обсуТдСниС ΠΈ принятиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (я надСюсь, Ρ‡Ρ‚ΠΎ Ρƒ вас Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ ΠΎΠ΄ΠΈΠ½ Π±ΠΎΡ€ΠΎΠ΄Π°Ρ‚Ρ‹ΠΉ Senior Senior Global Product Software Architect). ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΊΠ°ΠΊ слоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ быстро ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Decorator: Β«Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π² конструкторС экзСмпляр Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ интСрфСйса ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π΅ мСняя ΠΈΡ… основного повСдСния. Β» А вСдь Π΅Ρ‰Π΅ Π·Π° ΠΊΠ°Π΄Ρ€ΠΎΠΌ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΊΡƒΡ‡Π° ΠΌΠ΅Π»ΠΎΡ‡Π΅ΠΉ ΠΈ нюансов. И это для ΠΌΠ΅Π»ΠΊΠΎΠΉ Π΄Π΅Ρ‚Π°Π»ΠΈ вашСго Π΄ΠΈΠ·Π°ΠΉΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ дСсятки, Π° Ρ‚ΠΎ ΠΈ сотни. ΠœΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π΅ΠΌ слоТныС ΠΈ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Decorator Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Π³ΠΎΠ»ΠΎΠ²Π°Ρ… всСх Ρ‡Π»Π΅Π½ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠŸΡ€ΠΈ размытости Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π° это Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π’Π΅Π΄ΡŒ рСализация ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ обсуТдаСмой Π·Π°Π΄ΡƒΠΌΠΊΠΈ. А это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π΅Π²ΡŒΡŽ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сторонних инструмСнтов ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ практичСски Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мноТСство сторонних Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ Π½Π°ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π½Π° Π³Ρ€Π°Π±Π»ΠΈ, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ устроСно. А для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ общСизвСстныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ сильно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ.

Π’ ΠΆΠΈΠ·Π½ΠΈ ΠΌΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для описания ситуаций, ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², поступков. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ, ΠΌΡ‹ базируСмся Π½Π° общСизвСстных знаниях ΠΈ выстраиваСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° ΠΈΡ… основС. Β«Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π·Π΄ΠΎΡ€ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°ΠΊ Вася», Β«Ρ‚Π°ΠΊ ΠΆΠ΅ тяТСло ΠΊΠ°ΠΊ послС 5 ΠΊΠΌ ΠΏΡ€ΠΎΠ±Π΅ΠΆΠΊΠΈΒ», Β«ΠΏΠ»ΠΎΡ…ΠΎ ΠΊΠ°ΠΊ с Π±ΠΎΠ΄ΡƒΠ½Π°Β», «кислый ΠΊΠ°ΠΊ Π»ΠΈΠΌΠΎΠ½Β» ΠΈ Ρ‚.Π΄. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ выраТСния ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² своСй Ρ€Π΅Ρ‡ΠΈ постоянно ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅ΠΌ этого. Для нас ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡Π΅ΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС ΠΈ это позволяСт Π²Π°ΡˆΠ΅ΠΌΡƒ собСсСднику Π»ΡƒΡ‡ΡˆΠ΅ вас ΠΏΠΎΠ½ΡΡ‚ΡŒ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Если Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шаблона проСктирования, Π° просто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Π΅Π³ΠΎ примСнСния своими словами, Ρ‚ΠΎ Π²Ρ‹ пСрСросли ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Shu Π² извСстной восточной философии Shuhari (я ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ Π΄Π°Π²Π½ΠΎ писал ΠΎ Π΅Π΅ примСнимости ΠΊ Agile ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌ). На ΡƒΡ€ΠΎΠ²Π½Π΅ Shu Π²Ρ‹ просто слСдуСтС шаблонам ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΠΎΠ·Π½Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ, тонкости ΠΈ влияниС. На ΡƒΡ€ΠΎΠ²Π½Π΅ Ha Π²Ρ‹ ΡƒΠΆΠ΅ всС осознаСтС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… шаблонов, ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° ΠΈΡ… Π±Π°Π·Π΅, Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΈ контСкст.

На ΡƒΡ€ΠΎΠ²Π½Π΅ Ha я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ Β«Refactoring to PatternsΒ» ΠΎΡ‚ Π”ΠΆΠΎΡˆΡƒΠ° ΠšΠ΅Ρ€ΠΈΠ΅Π²ΡΠΊΠΈ. Π’ Π½Π΅ΠΉ рассказываСтся ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ нСподходящиС ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, Π° ΠΏΠΎΡ‚ΠΎΠΌ посрСдством Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΈ подходящим Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ. Π­Ρ‚Ρƒ ΠΊΠ½ΠΈΠ³Ρƒ стоит Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ha, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄ΠΎ этого ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ для вас просто пустым Π·Π²ΡƒΠΊΠΎΠΌ.

Π£ ΠΊΠ°ΠΊ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ri? На этом ΡƒΡ€ΠΎΠ²Π½Π΅ Π²Ρ‹ ΠΈ вовсС пСрСстаСтС Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ шаблонов. РСшСния Ρ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎ Π½Π° Π±Π°Π·Π΅ Π²Π°ΡˆΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ ΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π°ΠΊΠΎΠΏΠΈΠ»ΠΈ с Π³ΠΎΠ΄Π°ΠΌΠΈ. Π“Π΄Π΅-Ρ‚ΠΎ Π²Ρ‹Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Π³Π΄Π΅-Ρ‚ΠΎ ваши собствСнныС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стали для вас шаблонами Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС. Π’ Π³ΠΎΠ»ΠΎΠ²Π΅ Ρƒ вас пСрСстаСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Β«ΠΎΡ‚ шаблона ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽΒ» ΠΈ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«ΠΎΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½ΡƒΒ». Π’ΠΎΠ³Π΄Π° вмСсто вопросов ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… проСктирования Π½Π° собСсСдовании Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ вопросам ΠΎ примСнимости Π΄Π°Π½Π½ΠΎΠ³ΠΎ инструмСнта ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Тизни…

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΅ΠΌΡƒ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ качСствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Как ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ инструмСнт, Π² ΠΎΠ΄Π½ΠΈΡ… Ρ€ΡƒΠΊΠ°Ρ… ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ принСсти ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·Ρ‹, Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… β€” ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅Π΄. Π― попытался донСсти Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π΄Π°Π΄ΡƒΡ‚ Π²Π°ΠΌ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΠΈ ΠΊΠ°ΠΊ ΠΊ Π½ΠΈΠΌ стоит ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ. НадСюсь, ΠΌΠ½Π΅ это ΡƒΠ΄Π°Π»ΠΎΡΡŒβ€¦

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

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½ Π½Π° Ρ‚Ρ€ΠΈ части. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ссылкам:

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, Ρ‚ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных шаблонов Π½Π° PHP.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования β€” это ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ использованию Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… Π² повсСднСвном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΎ Π½Π΅ класс ΠΈ Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, это Π½Π΅Ρ‡Ρ‚ΠΎ большСС. Π¨Π°Π±Π»ΠΎΠ½ проСктирования, подходящий ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Ρƒ, рСализуСтся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π½Π΅ зависит ΠΎΡ‚ языка программирования. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ шаблон Π»Π΅Π³ΠΊΠΎ рСализуСтся Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅, Ссли Π½Π΅ Π²ΠΎ всСх языках, Π² зависимости ΠΎΡ‚ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… срСдств языка. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ шаблон, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ ΠΊ нСподходящСй Π·Π°Π΄Π°Ρ‡Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ принСсти Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ шаблон ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π»Π΅Π³ΠΊΠΎ ΠΈ просто.

БущСствуСт Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° шаблонов:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, позволяя ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ совмСстно.

ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, позволяя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ способом.

ΠŸΠΎΠ²Π΅Π΄Π΅Π½Ρ‡Π΅ΡΠΊΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ сущностями.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования

Π¨Π°Π±Π»ΠΎΠ½ проСктирования, ΠΏΠΎ своСй сути, это ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с извСстной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ?

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ ситуации. Π­Ρ‚ΠΈ классы интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ систСмой, Ρ‡Ρ‚ΠΎ Π½Π΅ позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ Π²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹ΠΌ ошибкам. ВмСсто этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ «БтратСгия» ΠΈ «АдаптСр» ΠΈ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ.

ΠŸΡ€ΠΎΡΡ‚ΠΎ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ Π½Π° шаблон «БтратСгия».

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования «БтратСгия»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

БтратСгия β€” повСдСнчСский шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² процСссС выполнСния Π² зависимости ΠΎΡ‚ контСкста ΠΏΡƒΡ‚Π΅ΠΌ инкапсуляции Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах.

Π“Π΄Π΅ это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ запись Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ (имя, адрСс, Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΈ Ρ‚. ΠΏ.), Π½ΠΎ, Π² зависимости ΠΎΡ‚ ситуации, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для обновлСния ΠΈ создания записи. МоТно ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ условиС if/else, Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ контСкст:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ шаблон «БтратСгия» ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² классы, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это излишнС. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ обязаны ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ слово Π² слово. Π›ΡŽΠ±Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ допустимы, Ссли ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

Π¨Π°Π±Π»ΠΎΠ½ «АдаптСр»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

АдаптСр β€” структурный шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ нСподходящий интСрфСйс.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для совмСстимости с интСрфСйсом Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса.

Как Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° β€” Β«ΠžΠ±Π΅Ρ€Ρ‚ΠΊΠ°Β». Он Β«ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚Β» Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс Π²ΠΎΠΊΡ€ΡƒΠ³ класса для Π΅Π³ΠΎ использования. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, имСя классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ классам Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π² Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π΅. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎ ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ вас ΠΎΡ‚ постоянного пСрСписывания большого количСства ΠΊΠΎΠ΄Π°, Ссли Π²Π°ΠΌ потрСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ дСйствий Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

Π‘Π΅Π· Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°:

Если Π½Π°ΠΌ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС это Π·Π°Π½ΠΎΠ²ΠΎ.

Π‘ использованиСм Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ Account :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Account ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π¨Π°Π±Π»ΠΎΠ½ Β«ΠœΠ΅Ρ‚ΠΎΠ΄-Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Β»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

Π€Π°Π±Ρ€ΠΈΠΊΠ° β€” ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой класс с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ для создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Основная Ρ†Π΅Π»ΡŒ этого шаблона β€” ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π² зависимости ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ контСкста Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Как Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

13–15 дСкабря, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Π‘Π½Π°Ρ‡Π°Π»Π° создадим Ρ‚Ρ€ΠΈ класса:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ:

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ HTML со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

Π¨Π°Π±Π»ΠΎΠ½ Β«Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Β»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ β€” это структурный шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² зависимости ΠΎΡ‚ ситуации.

ЦСль β€” Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ повСдСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Π΅Π· нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎΡ‚ шаблон β€” Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° наслСдованию. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ наслСдования, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ добавляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° Π½Π°ΠΌ понадобится:

Как Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

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

Π‘Π½Π°Ρ‡Π°Π»Π° опрСдСлимся, ΠΊΠ°ΠΊΠΈΠ΅ Β«Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΠΈΒ» Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сами Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. ВсС ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ __call для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Если ΠΌΡ‹ Π²ΠΎΠΉΠ΄Π΅ΠΌ Π² Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π½Π° Π·Π°Π³Π»Π°Π²Π½ΡƒΡŽ страницу, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ:

Π¨Π°Π±Π»ΠΎΠ½ Β«ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ°Β»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° β€” ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр класса с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ доступом.

Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΡƒ Β«ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈΒ» для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ поля Β«ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈΒ» Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ для всСх, ΠΊΡ‚ΠΎ Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚.

Как Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ сСссии ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… участков ΠΊΠΎΠ΄Π°, Π΄Π°ΠΆΠ΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. ΠœΠ΅Ρ‚ΠΎΠ΄ getInstance всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ сСссию.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΠ· мноТСства. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… проСктирования, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ. Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ Β«ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования» Β«Π‘Π°Π½Π΄Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Β».

И послСднСС: ΠΏΡ€ΠΈ использовании Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ шаблона ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ способом. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. Но ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ β€” ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·Ρƒ нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ.

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

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования простым языком. Π§Π°ΡΡ‚ΡŒ пСрвая. ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования простым языком. Π§Π°ΡΡ‚ΡŒ пСрвая. ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ шаблон проСктирования

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ проСктирования β€” это руководства ΠΏΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π­Ρ‚ΠΎ Π½Π΅ классы, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈ ΡΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Ρ‡ΡƒΠ΄Π°. Они скорСС ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ситуациях.

ВикипСдия описываСт ΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π¨Π°Π±Π»ΠΎΠ½ проСктирования, ΠΈΠ»ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния β€” повторяСмая архитСктурная конструкция, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ собой Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ проСктирования, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ контСкста.

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны

Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½ΠΈΠΆΠ΅ написаны Π½Π° PHP 7. Но это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ вас ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ, вСдь ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅.

Π’ΠΈΠΏΡ‹ шаблонов

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Ρ€Π΅Ρ… Π²ΠΈΠ΄ΠΎΠ²:

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ простыми словами, Ρ‚ΠΎ это ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для создания экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ связанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ β€” ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ процСсс инстанцирования. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ систСму нСзависимой ΠΎΡ‚ способа создания, ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π¨Π°Π±Π»ΠΎΠ½, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ классы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ наслСдованиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ наслСдуСмый класс, Π° шаблон, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ инстанцированиС Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹:

ΠŸΡ€ΠΎΡΡ‚Π°Ρ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° (Simple Factory)

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (ООП), Ρ„Π°Π±Ρ€ΠΈΠΊΠ° β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для создания Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° β€” это функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ класса ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСтся Β«Π½ΠΎΠ²Ρ‹ΠΌΒ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄ΠΎΠΌ, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π΅Ρ€ΠΈ. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π³Π»ΡƒΠΏΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π΅Ρ€ΠΈ, Π½Π°Π΄Π΅Π²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΡΡ‚ΠΎΠ»ΡΡ€Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅Ρ€ΡŒ. ВмСсто этого Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Π΅Ρ‘ Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами: ΠŸΡ€ΠΎΡΡ‚Π°Ρ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ экзСмпляр для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π΅ раскрывая Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΠΎΠ΄Ρƒ. Π£ нас Π΅ΡΡ‚ΡŒ интСрфСйс Door ΠΈ Π΅Π³ΠΎ рСализация:

И Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всё это:

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: Когда созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” это Π½Π΅ просто нСсколько присвоСний, Π° какая-Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ°, Ρ‚ΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ вмСсто повторСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ.

Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Fabric Method)

Π€Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон проСктирования, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ подклассам интСрфСйс для создания экзСмпляров Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания наслСдники ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ класс ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ. Π˜Π½Ρ‹ΠΌΠΈ словами, Π΄Π°Π½Π½Ρ‹ΠΉ шаблон Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² наслСдникам Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ спСцифичСскиС классы, Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ абстрактными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ высоком ΡƒΡ€ΠΎΠ²Π½Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΠΎ Π½Π°ΠΉΠΌΡƒ. НСвозмоТно ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ провСсти собСсСдования со всСми ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌΠΈ Π½Π° всС вакансии. Π’ зависимости ΠΎΡ‚ вакансии ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ этапы собСсСдования ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ людьми.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами: ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ прСдоставляСт способ дСлСгирования Π»ΠΎΠ³ΠΈΠΊΠΈ создания экзСмпляра Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ классам.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΠΊΠΎΠ΄Ρƒ. Рассмотрим ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎ HR-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ интСрфСйс Interviewer ΠΈ нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ для Π½Π΅Π³ΠΎ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим нашСго HiringManager :

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ любой Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽΠ΅Ρ€Π°:

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: ПолСзСн, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ нСкоторая общая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² классС, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ подкласс динамичСски опрСдСляСтся Π²ΠΎ врСмя выполнСния. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ подкласс Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ.

Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° (Abstract Factory)

Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° β€” ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон проСктирования, прСдоставляСт интСрфСйс для создания сСмСйств взаимосвязанных ΠΈΠ»ΠΈ взаимозависимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ спСцифицируя ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… классов. Π¨Π°Π±Π»ΠΎΠ½ рСализуСтся созданиСм абстрактного класса Factory, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой интСрфСйс для создания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ интСрфСйса ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ). Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΈΡˆΡƒΡ‚ΡΡ классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот интСрфСйс.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: Π Π°ΡΡˆΠΈΡ€ΠΈΠΌ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎ Π΄Π²Π΅Ρ€ΠΈ ΠΈΠ· простой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’ зависимости ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… Π½ΡƒΠΆΠ΄ Π²Π°ΠΌ понадобится дСрСвянная Π΄Π²Π΅Ρ€ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, ТСлСзная Π΄Π²Π΅Ρ€ΡŒ β€” ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ пластиковая β€” ΠΈΠ· Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Π°ΠΌ понадобится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ спСциалист: столяр для дСрСвянной Π΄Π²Π΅Ρ€ΠΈ, сварщик для ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π΅Ρ€ΡŒΠΌΠΈ.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами: Π€Π°Π±Ρ€ΠΈΠΊΠ° Ρ„Π°Π±Ρ€ΠΈΠΊ. Π€Π°Π±Ρ€ΠΈΠΊΠ°, которая Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅, Π½ΠΎ связанныС/зависимыС Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π±Π΅Π· указания ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… классов.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌΡΡ ΠΊ ΠΊΠΎΠ΄Ρƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎ Π΄Π²Π΅Ρ€ΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° Ρƒ нас Π΅ΡΡ‚ΡŒ интСрфСйс Door ΠΈ нСсколько Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ:

Π—Π°Ρ‚Π΅ΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько DoorFittingExpert для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π²Π΅Ρ€Π΅ΠΉ:

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

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: Когда Π΅ΡΡ‚ΡŒ взаимосвязанныС зависимости с Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ простой Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ создания.

Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ (Builder)

Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ β€” ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт способ создания составного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° «ВСлСскопичСский конструктор».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π² McDonalds ΠΈ Π·Π°ΠΊΠ°Π·Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΈΠ³ΠœΠ°ΠΊ, ΠΈ Π²Π°ΠΌ готовят Π΅Π³ΠΎ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… вопросов. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Но Π΅ΡΡ‚ΡŒ случаи, ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠ° создания ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя большС шагов. НапримСр, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ сэндвич Π² Subway: Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан. Какой Ρ…Π»Π΅Π± Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅? КакиС соусы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? Какой сыр? Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ шаблон Β«Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΒ».

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами: Π¨Π°Π±Π»ΠΎΠ½ позволяСт Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, избСгая засорСния конструктора. Он ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ мноТСство шагов, связанных с Π΅Π³ΠΎ созданиСм.

Π”Π°Π²Π°ΠΉΡ‚Π΅ я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ВСлСскопичСский конструктор». Когда-Ρ‚ΠΎ ΠΌΡ‹ всС Π²ΠΈΠ΄Π΅Π»ΠΈ конструктор Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² конструктора ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π·ΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΈ станСт слоТно ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ располоТСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, этот список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ расти, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ «ВСлСскопичСский конструктор».

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ «БтроитСля»:

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: Когда ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°Π΄ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ «тСлСскопичСского конструктора». Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Β«Ρ„Π°Π±Ρ€ΠΈΠΊΠΈΒ» β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° созданиС Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ шаг, Π° Β«ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΒ» примСняСтся ΠΏΡ€ΠΈ мноТСствС шагов.

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ (Prototype)

Π—Π°Π΄Π°Ρ‘Ρ‚ Π²ΠΈΠ΄Ρ‹ создаваСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ экзСмпляра-ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΈ создаёт Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡƒΡ‚Ρ‘ΠΌ копирования этого ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°. Он позволяСт ΡƒΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ позволяСт ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы». Π’ качСствС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° указываСтся интСрфСйс / абстрактный класс Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, Π° классы-наслСдники ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° наслСдника, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ этот Ρ‚ΠΈΠΏ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ Π”ΠΎΠ»Π»ΠΈ? ΠžΠ²Π΅Ρ‡ΠΊΠ°, которая Π±Ρ‹Π»Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π°. НС Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ, Π³Π»Π°Π²Π½ΠΎΠ΅ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ здСсь всС вращаСтся Π²ΠΎΠΊΡ€ΡƒΠ³ клонирования.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами: ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, основанный Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ клонирования.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ позволяСт Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ копию ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ согласно вашим Π½ΡƒΠΆΠ΄Π°ΠΌ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π½ΠΎΠ²ΠΎ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌΡΡ ΠΊ ΠΊΠΎΠ΄Ρƒ. Π’ PHP это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с использованиСм clone :

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ __clone для измСнСния ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ повСдСния.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: Когда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° созданиС Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΡ€ΠΎΠΆΠ΅ клонирования.

ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° (Singleton)

ΠžΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° β€” ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон проСктирования, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π² однопроцСссном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ СдинствСнный экзСмпляр Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса, ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ доступа ΠΊ этому экзСмпляру.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: Π’ странС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚. Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°. ΠŸΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚ здСсь являСтся ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΎΠΉ.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ создаваСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся СдинствСнным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ своСго класса.

Π’ΠΎΠΎΠ±Ρ‰Π΅ шаблон ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΈΠ·Π½Π°Π½ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ использования. Он Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»ΠΎΡ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ примСнСния, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Π²ΠΎΠ΄ΠΈΡ‚ глобальноС состояниС Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ части прилоТСния, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ трудности ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅. Π”Ρ€ΡƒΠ³ΠΎΠΉ минус β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ ваш ΠΊΠΎΠ΄ связанным.

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… камнях шаблона ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ° Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² нашСй ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΠΎΠ΄Ρƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ, сдСлайтС конструктор ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ создайтС ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для хранСния экзСмпляра:

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

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

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