Шаблони за дизайн (софтуер)

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Шаблоните за дизайн (англ: Software design pattern) представляват концепция предназначена за разрешаване на често срещани проблеми в обектно-ориентираното програмиране. Тази концепция предлага стандартни решения за архитектурни и концептуални проблеми в компютърното програмиране.

Тук не става въпрос за конкренти алгоритми или част от програмен код. Шаблоните за дизайн са независими от програмния език. Те представляват архитектурни решения на вече познати и много често срещани проблеми в програмирането. Може да се каже, че шаблоните за дизайн представляват средство за прилагане на световния опит на програмисти и аналитици.

Шаблони[редактиране | edit source]

Създаващи шаблони[редактиране | edit source]

Наименование Описание В книгата Шаблони за дизайн (Design Patterns) В Code Complete
Абстрактна Фабрика (Abstract Factory) Предоставя интерфейс за създаване на семейства от обекти без да са посочени техните конкретни класове. Ok Ok
Метод Фабрика (Factory method) Дефинира интерфейс за създаване на обекти, но оставя на подкласовете да решат от кои класове да направят инстанции. Ok Ok
Строител (Builder) Разделя създаването на сложен обект от неговото представяне, така че един и същи процес да може да създава обекти с различно представяне. Ok Не
Късна инициализация (Lazy initialization) Отлагане във времето на създаването на обект, изчисляването на стойност или на някакъв друг отнемащ ресурси процес, до момента в който не е нужен. Не Не
Object pool Предотвратява скъпо заделяне или освобождаване на ресурс чрез рециклиране на обекти с кратък живот. Не Не
Прототип (Prototype) Определя прототипна инстанция на някакъв вид обект и създава нови обекти чрез копиране на прототипа. Ok Не
Сек (Singleton) Осигурява клас, който може да има само една единствена инстанция и предоставя глобален достъп до нея. Ok Ok

Структурни шаблони[редактиране | edit source]

Наименование Описание В книгата Шаблони за дизайн (Design Patterns) В Code Complete
Адаптер (Adapter) Конвертира интерфейса на даден клас към друг интерфейс, който е очакван от клиента. Адаптерът оставя класовете да работят заедно. Това е необходимо заради несъвместимастта им. Ok Ok
Мост (Bridge) Отделя абстракцията от нейната имплементация, така че двете могат да бъдат променяни независимо. Ok Ok
Композиция (Composite) Ok Ok
Декоратор (Decorator) Динамично добавя допълнителни отговорности на обект, като запазва интерфейса му. Декораторите предоставят гъвкава алтернатива на наследяването за разширяване на функционалността. Ok Ok
Фасада (Facade) Предоставя уеднаквен интерфейс за редица интерфейси. Фасадата дефинира интерфейс от по-високо ниво, което прави по-лесна употребата на подсистемата. Ok Ok
Миниобект (Flyweight) Ok Не
Пълномощно (Proxy) Предоставя заместник на друг обект, за да се контролира достъпа до него. Ok Не

Поведенчески шаблони[редактиране | edit source]

Наименование Описание В книгата Шаблони за дизайн (Design Patterns) В Code Complete
Верига отговорности (Chain of Responsibility) Ok Не
Команда (Command) Капсулира дадена заявка във вид на обект. Това позволява свързването на клиента с различни заявки или опашки, както и поддръжка на функция за връщане на промените (undo). Ok Не
Интерпретатор (Interpreter) Даден език дефинира своята граматика, също така и интерпретатор, който използва граматиката, за да интерпретира изречения написани на този език. Ok Не
Итератор (Iterator) Предоставя начин за последователен достъп до елементите на обект, без да е нужна вътрешна информация за обекта. Ok Ok
Посредник (Mediator)

Дефинира обект който капсулира връзките между списък от обекти. Медиаторът поддържа шаблона Разхлабени връзки (loose coupling) като предпазва директно обвързване между обектите, давайки възможност това да се случва на по-високо ниво.

Ok Не
Спомен (Memento) Без да нарушава капсулацията на даден обект, прихваща и изважда вътрешното му състояние с цел да бъде възвърнато това състояние в по-късен етап. Ok Не
Празен обект (Null Object) Проектиран е да действа като стойност по подразбиране на даден обект. Не Не
Наблюдател (Observer) Дефинира зависимост "един към много" между обектите, така че ако един обект промени състоянието си, всички зависими от него обекти да бъдат известени и обновени автоматично. Ok Ok
Състояние (State) Позволява на даден обект да променя поведението си при промяна на вътрешното му състояние. Изглежда все едно обектът е променил класа си. Ok Не
Стратегия (Strategy) Дефинира семейство от капсулирани алгоритми и ги прави взаемозаменими. Стратегията позволява промяна на алгоритмите, независимо от клиента, който ги използва. Ok Ok
Спецификация (Specification) Не Не
Шаблонен метод (Template method) Дефинира скелет на алгоритъм в дадена операция, като оставя някои стъпки за подкласовете. Шаблонният метод позволява на подкласовете да предефинират някои стъпки на даден алгоритъм, без да променят структурата му. Ok Ok
Посетител (Visitor) Посетителят предоставя възможност за дефиниране на нова операция, без да се променя класа на елемента върху който се извършва операцията. Ok Не

Архитектурни шаблони[редактиране | edit source]

Източници[редактиране | edit source]

  • Шаблони за дизайн, Design Patterns - Ерик Гама, Ричард Хелм, Ралф Джонсън, 2005, издателство СофтПрес. ISBN 9546853526
  • Английска, френска и руска версия на Уикипедия