Шаблони за дизайн
Шаблоните за дизайн (англ: Software design pattern) представляват концепция, предназначена за разрешаване на често срещани проблеми в обектно ориентираното програмиране. Тази концепция предлага стандартни решения за архитектурни и концептуални проблеми в компютърното програмиране.
Тук не става въпрос за конкренти алгоритми или част от програмен код. Шаблоните за дизайн са независими от програмния език. Те представляват архитектурни решения на вече познати и много често срещани проблеми в програмирането. Може да се каже, че шаблоните за дизайн представляват средство за прилагане на световния опит на програмисти и аналитици.
Шаблони
редактиранеСъздаващи шаблони
редактиранеНаименование | Описание | В книгата Шаблони за дизайн (Design Patterns) | В книгата Code Complete |
---|---|---|---|
Абстрактна Фабрика (Abstract Factory) | Предоставя интерфейс за създаване на семейства от обекти без да са посочени техните конкретни класове. | ||
Метод Фабрика (Factory method) | Дефинира интерфейс за създаване на обекти, но оставя на подкласовете да решат от кои класове да направят инстанции. | ||
Строител (Builder) | Разделя създаването на сложен обект от неговото представяне, така че един и същи процес да може да създава обекти с различно представяне. | ||
Късна инициализация (Lazy initialization) | Отлагане във времето на създаването на обект, изчисляването на стойност или на някакъв друг отнемащ ресурси процес, до момента в който не е нужен. | ||
Object pool | Предотвратява скъпо заделяне или освобождаване на ресурс чрез рециклиране на обекти с кратък живот. | ||
Прототип (Prototype) | Определя прототипна инстанция на някакъв вид обект и създава нови обекти чрез копиране на прототипа. | ||
Сек (Singleton) | Осигурява клас, който може да има само една-единствена инстанция и предоставя глобален достъп до нея. |
Структурни шаблони
редактиранеНаименование | Описание | В книгата Шаблони за дизайн (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
Тази страница частично или изцяло представлява превод на страницата Software design pattern в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите.
ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни. |