Шаблони за дизайн
Шаблоните за дизайн (англ: Software design pattern) представляват концепция, предназначена за разрешаване на често срещани проблеми в обектно ориентираното програмиране. Тази концепция предлага стандартни решения за архитектурни и концептуални проблеми в компютърното програмиране.
Тук не става въпрос за конкренти алгоритми или част от програмен код. Шаблоните за дизайн са независими от програмния език. Те представляват архитектурни решения на вече познати и много често срещани проблеми в програмирането. Може да се каже, че шаблоните за дизайн представляват средство за прилагане на световния опит на програмисти и аналитици.
Шаблони
Създаващи шаблони
Структурни шаблони
Наименование
|
Описание
|
В книгата Шаблони за дизайн (Design Patterns)
|
В Code Complete
|
Адаптер (Adapter)
|
Конвертира интерфейса на даден клас към друг интерфейс, който е очакван от клиента. Адаптерът оставя класовете да работят заедно. Това е необходимо заради несъвместимостта им.
|
|
|
Мост (Bridge)
|
Отделя абстракцията от нейната имплементация, така че двете могат да бъдат променяни независимо.
|
|
|
Композиция (Composite)
|
Композиране на обекти в дървовидни структури за представяне на йерархии от елементи.
|
|
|
Декоратор (Decorator)
|
Динамично добавя допълнителни отговорности на обект, като запазва интерфейса му. Декораторите предоставят гъвкава алтернатива на наследяването за разширяване на функционалността.
|
|
|
Фасада (Facade)
|
Предоставя уеднаквен интерфейс за редица интерфейси. Фасадата дефинира интерфейс от по-високо ниво, което прави по-лесна употребата на подсистемата.
|
|
|
Миниобект (Flyweight)
|
Използва поделяне за ефективна поддръжка на голям брой малки обекти.
|
|
|
Пълномощно (Proxy)
|
Предоставя заместник на друг обект, за да се контролира достъпа до него.
|
|
|
Поведенчески шаблони
Наименование
|
Описание
|
В книгата Шаблони за дизайн (Design Patterns)
|
В Code Complete
|
Верига отговорности (Chain of Responsibility)
|
Избягва обвързването на изпращача на дадена заявка с получателя ѝ, като дава възможност на няколко обекта да обработят заявката. Свързва заедно приемащите обекти и предава заявката по веригата, докато някой от тях я обработи.
|
|
|
Команда (Command)
|
Капсулира дадена заявка във вид на обект. Това позволява свързването на клиента с различни заявки или опашки, както и поддръжка на функция за връщане на промените (undo).
|
|
|
Интерпретатор (Interpreter)
|
Даден език дефинира своята граматика, също така и интерпретатор, който използва граматиката, за да интерпретира изречения написани на този език.
|
|
|
Итератор (Iterator)
|
Предоставя начин за последователен достъп до елементите на обект, без да е нужна вътрешна информация за обекта.
|
|
|
Посредник (Mediator)
|
Дефинира обект който капсулира връзките между списък от обекти. Медиаторът поддържа шаблона Разхлабени връзки (loose coupling) като предпазва директно обвързване между обектите, давайки възможност това да се случва на по-високо ниво.
|
|
|
Спомен (Memento)
|
Без да нарушава капсулацията на даден обект, прихваща и изважда вътрешното му състояние с цел да бъде възвърнато това състояние в по-късен етап.
|
|
|
Празен обект (Null Object)
|
Проектиран е да действа като стойност по подразбиране на даден обект.
|
|
|
Наблюдател (Observer)
|
Дефинира зависимост „един към много“ между обектите, така че ако един обект промени състоянието си, всички зависими от него обекти да бъдат известени и обновени автоматично.
|
|
|
Състояние (State)
|
Позволява на даден обект да променя поведението си при промяна на вътрешното му състояние. Изглежда все едно обектът е променил класа си.
|
|
|
Стратегия (Strategy)
|
Дефинира семейство от капсулирани алгоритми и ги прави взаемозаменими. Стратегията позволява промяна на алгоритмите, независимо от клиента, който ги използва.
|
|
|
Спецификация (Specification)
|
|
|
|
Шаблонен метод (Template method)
|
Дефинира скелет на алгоритъм в дадена операция, като оставя някои стъпки за подкласовете. Шаблонният метод позволява на подкласовете да предефинират някои стъпки на даден алгоритъм, без да променят структурата му.
|
|
|
Посетител (Visitor)
|
Посетителят предоставя възможност за дефиниране на нова операция, без да се променя класа на елемента върху който се извършва операцията.
|
|
|
Архитектурни шаблони
Източници
- Шаблони за дизайн, Design Patterns – Ерик Гама, Ричард Хелм, Ралф Джонсън, 2005, издателство СофтПрес. ISBN 954-685-352-6
|
|