→ Пошук по сайту       Увійти / Зареєструватися
Знання Патерни

Породжуючі патерни – Creational patterns

Так уже прийнято, що усі дизайн патерни поділені на три великі групи, а саме: породжуючі, структурні та поведінкові. Звичайно, що можна було б опустити вступ до кожної із груп, але, насправді, поділ на групи має досить велике значення. Не даремно хлопці із «банди чотирьох» вибрали саме 23 патерни а не більше і не менше, і недаремно вони поділили їх на ці групи. Це ж була основна мета їхньої роботи –структуризувати та формалізувати вже існуючі дизайн патерни.


Отже, породжуючі патерни. Основним завданням таких патернів є спростити створення об’єктів, які необхідні аплікації.

Інколи ви працюєте із певним набором об’єктів через групу інтерфейсів. А тоді хочете створювати об’єкти тільки із іншого набору, щоб пристосувати ваш код до інших умов. Звичайно група інтерфейсів, через які ви оперуєте, залишається та ж сама. Спростити створення відповідного набору допоможе Абстрактна Фабрика.
А інколи структура деякого об’єкта дуже складна і залежить від багатьох чинників. Щоб спростити створення такого об’єкту зазвичай використовують Будівельника.

А щоб зручно вибрати одну реалізацію та інстанціювати її, відштовхуючись від простої умови, можна використати Фабричний Метод.
Нерідко постає завдання отримати копію уже існуючого об’єкта, або отримати можливість швидко генерувати багато подібних екземплярів. У такому випадку Прототип якраз згодиться.

Вибагливе множення об’єктів не єдине завдання, яке вам слід буде виконувати у роботі, вам часто буде потрібно робити все точно навпаки – мати один-єдиний екземпляр об’єкта і ні за яких обставин не доступатися до йому подібних. Функціональність єдиного екземпляра забезпечуються Синглтоном.

По матеріалам книги Андрія Будая "Дизайн патерни – просто, як двері". Матеріал розміщується за домовленістю з автором.
Робота представлена за умовами ліцензії Creative Commons Attribution-NonCommercial 3.0 Unported License.

1. Абстрактна Фабрика — Abstract factory

Уявімо, що ви прийшли в іграшковий магазин (відіграючи роль діда Мороза ) і хочете накупити іграшок дітям (і не обов’язково своїм). Мартуся любить плюшеві іграшки, вона часто із ними лягає у ліжко спати. А Дмитрик страшний розбишака, ламає все на світі, рве м’які іграшки і, зазвичай, віддає перевагу гратися із твердими, дерев’яними іграшками. Двоє дітей хочуть ведмедика і котика і ще купу інших тваринок.

2. Будівельник — Builder

Уявіть, що ви володієте магазином (гаражем) з продажу персональних комп’ютерів, в якому можна вибирати конфігурацію прямо біля каси (як піцу в піцерії). Вам слід створити систему, що дозволить легко будувати будь-яку конфігурацію ноутбука для будь-якого покупця. Причому стандартні конфігурації мають складатися «по накату».

3. Фабричний Метод — Factory method

Уявіть, що ваша аплікація є дуже складною, і так склалося, що ви використовуєте два логінг провайдери: один Log4Net та інший Enterprise.Logging. Ваш колега додумався помістити вибір провайдера прямо у конфігураційний файл. Так як ви всю логіку логування абстрагуєте за інтерфейсом ILogger, то вам не хотілося б, щоб при потребі логгера вам приходилося по умові перевіряти що записано у конфізі і тоді створювати необхідний екземпляр.

4. Прототип — Prototype

Прототип дозволяє нам створювати копії об'єктів, що уже визначені на стадії дизайну (наприклад, список можливих типів зустрічей) або ж визначаються під час виконання програми («п’ятнична вечірка»), таким чином відпадає необхідність заповняти всі елементи об'єкту від «А до Я». Вже створені або визначені екземпляри об'єкту називаються прототипічними екземплярами (prototypical instances).

5. Одинак — Singleton

Уявімо, що нам потрібна глобальна логувальна система в програмі, також нам треба логувати наші повідомлення в якийсь один-єдиний файл, причому нумеруючи повідомлення послідовно, незалежно від того, з якого закутка програми вилетіла помилка. Як можна це зробити?
загрузка...
Сторінки, близькі за змістом