Шаблони за дизайн

от Уикипедия, свободната енциклопедия

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

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

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

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

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

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

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

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

Наименование Описание В книгата Шаблони за дизайн (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 Не

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

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

  • Шаблони за дизайн, Design PatternsЕрик Гама, Ричард Хелм, Ралф Джонсън, 2005, издателство СофтПрес. ISBN 954-685-352-6
  Тази страница частично или изцяло представлява превод на страницата Software design pattern в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​