Page 46 - 4190
P. 46
Для отримання різних представлень деяких даних за допомогою
патерну Builder розпорядник Director повинен використати відповідні
екземпляри ConcreteBuilder. Раніше говорилося про завдання пере-
творення RTF-документів у документи різних форматів. Для його ви-
рішення клас Builder оголошує інтерфейси для перетворення окремих
частин початкового документу, таких як текст, графіка та керуюча
інформація про форматування, а похідні класи WordBuilder,
AsciiBuilder та інші, їх реалізують з урахуванням особливостей того
або іншого формату. Так, наприклад, конвертор AsciiBuilder повинен
враховувати той факт, що простий текст не може містити зображень
та керуючої інформації, про форматування, тому відповідні методи
будуть порожніми.
За запитом клієнта розпорядник Director послідовно зчитуватиме
дані з RTF-документа і передаватиме їх у вибраний раніше конвертор,
наприклад, AsciiBuilder. Після того, як усі дані прочитані, отриманий
новий документ у вигляді ASCII-тесту можна повернути клієнтові.
Слід зазначити, для того, щоб замінити формат початкових даних (тут
RTF) на іншій, досить використати інший клас розпорядника.
Дуже часто базовий клас будівельника не лише оголошує інтер-
фейс для побудови частин продукту, але і визначає нічого не роблячи
реалізацію за замовчуванням. Тоді відповідні підкласи перевизнача-
ють тільки ті методи, які беруть участь у побудові поточного об'єкту.
Також для створення складних продуктів може використовувати-
ся патерн Abstract Factory. Якщо патерн Abstract Factory акцентує
увагу на створенні сімейств деяких об'єктів, то патерн Builder підкре-
слює поетапну побудову продукту. При цьому клас Builder приховує
усі подробиці побудови складного продукту так, що Director нічого
не знає про його складові частини.
Патерн Builder має такі переваги:
1. Можливість контролювати процес створення складного продукту.
2. Можливість отримання різних представлень деяких даних.
Також він не позбавлений недоліків, ConcreteBuilder і створюва-
ний ним продукт жорстко пов'язані між собою, тому при внесенні
змін у клас продукту швидше за все доведеться відповідним чином
змінювати і клас ConcreteBuilder.
Патерн Factory Method
У системі часто вимагається створювати об'єкти самих різних ти-
пів. Патерн Factory Method (фабричний метод) може бути корисний
для вирішенні таких завдань:
46