3 design pattern-а в ruby

Често чувам от люде, които уважавам, че design pattern-ите са начини да се решат ограничения в статичните езици. И че няма нужда от тях в динамичните – ruby, python и perl. Че са напълно излишни “ООП глупости”, от които един истински програмист няма нужда. Силно несъгласен съм.

Шаблоните представляват различни начини да си организираш идеите за да решиш някакъв структурен проблем. Вземете например функциите - тези които дефинирате с def в ruby и python и с function в JavaScript и PHP. Те са нещо като design pattern - начин да групираш последователност от инструкции, за да ги използваш на повече от едно място (още за да създадеш абстракция, да скриеш имплементация, да изградиш кохезия и т.н.). Съвсем аналогично е – те представляват подход към проблема, а не “статична рецепта за решаването му”.

Ще се опитам да илюстрирам горното, като покажа как изглеждат няколко шаблона в java и съответо в ruby.

Фабрика (Factory)

Най-класическият шаблон, с който несъмнено сте запознати, ако сте се зачели в книгата. Той отделя детайлите по създаването на обект от алгоритъма, който го създадава. Например имате библиотека, която прави басейн (pool) от обекти. Разбира се, искате басейните да са генерични – да ги ползвате както за връзки към базата данни, така и за връзки към CVS, например.

Ще направя малко отклонение, в случай че не сте виждали тази концепция. В Java светът много често се говори за database connection pool. Понеже връзките към базата данни са скъпи за създаване, добра идеята е да пуснете десет при стартиране и след това приложението ви да работи с тях. Един басейн ви позволява да вземате обекти от него и да връщате обекти в него. Има редица детайли, като валидация на обекта преди да се вземе (връзката по мрежата може да е загинала), създаване на нов обект ако при поискване всички са заети и т.н. Няма да навлизам в тях, за да задържа примера прост.

Съоветно басейнът ще изглежда така: