Page 44 - 4190
P. 44
користати як прототип, так і абстрактну фабрику. У інших ситуаціях
породжуючі шаблони доповнюють один одного. Так, застосовуючи
патерн-будівельник, можна використати інші шаблони для вирішення
питання про те, які компоненти треба будувати, а прототип часто ре-
алізується разом з патерном- сингелтоном. Породжуючі шаблони тіс-
но пов'язані один з одним, їх розгляд доцільніше проводити спільно,
щоб краще було видно їх схожості і відмінності.
Розглянемо найбільш вживані патерни проектування, які викори-
стовують під час програмування
Патерн Builder
Патерн Builder (будівельник) може допомогти у вирішенні таких
завдань:
У системі можуть існувати складні об'єкти, створити які за одну
операцію важко або неможливо. Потрібна поетапна побудова об'єктів
з контролем результатів виконання кожного етапу.
Дані повинні мати декілька представлень. Наведемо класичний
приклад. Нехай є деякий початковий документ у форматі RTF (Rich
Text Format), в загальному випадку текст, що містить, графічні зо-
браження і службову інформацію про форматування (розмір і тип
шрифтів, відступи та ін.). Якщо цей документ у форматі RTF пере-
творити в інші формати (наприклад, Microsoft Word або простий
ASCII-текст), то отримані документи і будуть представленнями поча-
ткових даних.
Патерн Builder відділяє алгоритм поетапного конструювання
складного продукту (об'єкту) від його зовнішнього представлення
так, що за допомогою одного і того ж алгоритму можна отримувати
різні представлення цього продукту. Поетапне створення продукту
означає його побудову за частинами. Після того як побудовано
останню частину, продукт можна використати.
Для цього патерн Builder визначає алгоритм поетапного створен-
ня продукту в спеціальному класі Director (розпорядник), а відповіда-
льність за координацію процесу зборки окремих частин продукту по-
кладає на ієрархію класів Builder. У цій ієрархії базовий клас Builder
оголошує інтерфейси для побудови окремих частин продукту, а від-
повідні підкласи ConcreteBuilder їх реалізують відповідним чином,
наприклад, створюють або отримують потрібні ресурси, зберігають
проміжні результати, контролюють результати виконання операцій.
UML-діаграма класів патерну Builder представлена на рисунку
5.1.
44