Книги Українською Мовою » 💛 Інше » Занурення в патерни проектування, Олександр Швець 📚 - Українською

Читати книгу - "Занурення в патерни проектування, Олександр Швець"

В нашій бібліотеці можна безкоштовно в повній версії читати книгу онлайн українською мовою "Занурення в патерни проектування" автора Олександр Швець. Жанр книги: 💛 Інше. Наш веб сайт ReadUkrainianBooks.com дає можливість читати повні версії улюблених книг на Вашому гаджеті (IPhone, Android) або комп’ютері абсолютно безкоштовно, без реєстрації та СМС. Також маєте можливість завантажити книги на свій гаджет у форматі PDF, EPUB, FB2. Файли електронних книг - це цифрові файли, які призначені для перегляду на спеціальних пристроях, що відомі як читальні пристрої для електронних книг.

Шрифт:

-
+

Інтервал:

-
+

Добавити в закладку:

Добавити
1 ... 15 16 17 ... 58
Перейти на сторінку:
суво­ро обов’язко­вим. Ви може­те викли­ка­ти мето­ди буді­ве­льни­ка і без­по­се­ре­дньо з кліє­нтсько­го коду. Тим не менш, дире­ктор кори­сний, якщо у вас є кілька спосо­бів конструю­ва­ння про­ду­ктів, що від­рі­зняю­ться поря­дком і наявни­ми кро­ка­ми конструю­ва­ння. У цьому випа­дку ви змо­же­те об’єдна­ти всю цю логі­ку в одно­му класі.

Така стру­кту­ра кла­сів повні­стю при­хо­ває від кліє­нтсько­го коду про­цес конструю­ва­ння об’єктів. Кліє­нту зали­ши­ться лише прив’язати бажа­но­го буді­ве­льни­ка до дире­кто­ра, а потім отри­ма­ти від буді­ве­льни­ка гото­вий результат.

Стру­кту­ра

Інте­рфе­йс буді­ве­льни­ка ого­ло­шує кроки конструю­ва­ння про­ду­ктів, спі­льні для всіх видів буді­ве­льни­ків.

Конкре­тні буді­ве­льни­ки реа­лі­зую­ть кроки буді­вни­цтва, кожен по-своє­му. Конкре­тні буді­ве­льни­ки можу­ть виго­тов­ля­ти різно­рі­дні об’єкти, що не мають спі­льно­го інтерфейсу.

Про­дукт — об’єкт, що ство­рює­ться. Про­ду­кти, зро­бле­ні різни­ми буді­ве­льни­ка­ми, не зобов’язані мати спі­льний інтерфейс.

Дире­ктор визна­чає поря­док викли­ку кро­ків буді­ве­льни­ків, нео­бхі­дних для виро­бни­цтва про­ду­ктів тієї чи іншої конфігурації.

Зазви­чай Кліє­нт подає до кон­стру­кто­ра дире­кто­ра вже гото­вий об’єкт-буді­ве­льник, а дире­ктор нада­лі вико­ри­сто­вує тільки його. Але можли­вим є також інший варіа­нт, коли кліє­нт пере­дає буді­ве­льни­ка через пара­метр буді­ве­льно­го мето­ду дире­кто­ра. У тако­му випа­дку можна щора­зу вико­ри­сто­ву­ва­ти різних буді­ве­льни­ків для виро­бни­цтва різно­ма­ні­тних від­обра­же­нь об’єктів.

Псе­вдо­код

У цьому при­кла­ді Буді­ве­льник вико­ри­сто­вує­ться для покро­ко­во­го конструю­ва­ння авто­мо­бі­лів та техні­чних посі­бни­ків до них.

При­клад покро­ко­во­го конструю­ва­ння авто­мо­бі­лів та інстру­кцій до них.

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

Кліє­нт може зби­ра­ти авто­мо­бі­лі, пра­цюю­чи з буді­ве­льни­ком без­по­се­ре­дньо. З іншо­го боку, він може дору­чи­ти цю спра­ву дире­кто­ру. Це об’єкт, який знає, які кроки буді­ве­льни­ка потрі­бно викли­ка­ти, щоб отри­ма­ти кілька найпо­пу­ля­рні­ших конфі­гу­ра­цій автомобілів.

Проте, до кожно­го авто­мо­бі­ля ще потрі­бен посі­бник кори­сту­ва­ча, що від­по­від­ає його конфі­гу­ра­ції. Для цього ми ство­ри­мо ще один клас буді­ве­льни­ка, який замі­сть конструю­ва­ння авто­мо­бі­ля дру­ку­ва­ти­ме сто­рі­нки посі­бни­ка до тієї дета­лі, яку ми вбу­до­вує­мо в про­дукт. Тепер, пропу­сти­вши через одні й ті самі кроки оби­два типи буді­ве­льни­ків, ми отри­має­мо авто­мо­бі­ль та від­по­від­ний до нього посі­бник користувача.

Оче­ви­дно, що папе­ро­вий посі­бник і мета­ле­вий авто­мо­бі­ль — це дві абсо­лю­тно різні речі. З цієї при­чи­ни ми пови­нні отри­му­ва­ти резуль­тат без­по­се­ре­дньо від буді­ве­льни­ків, а не від дире­кто­ра. Іна­кше нам дове­ло­ся б жорстко прив’язати дире­кто­ра до конкре­тних кла­сів авто­мо­бі­лів і посібників.

// Будівельник може створювати різні продукти, використовуючи
// один і той самий процес будівництва.
class Car is
  // Автомобілі можуть відрізнятися комплектацією: типом
  // двигуна, кількістю сидінь, можуть мати або не мати GPS і
  // систему навігації тощо. Крім того, автомобілі можуть бути
  // міськими, спортивними або позашляховиками.

class Manual is
  // Посібник користувача для даної конфігурації автомобіля.


// Інтерфейс будівельників оголошує всі можливі етапи та кроки
// конфігурації продукту.
interface Builder is
  method reset()
  method setSeats(...)
  method setEngine(...)
  method setTripComputer(...)
  method setGPS(...)

// Усі конкретні будівельники реалізують загальний інтерфейс по-
// своєму.
class CarBuilder implements Builder is
  private field car:Car
  method reset()
    // Помістити новий об'єкт Car в полі "car".
  method setSeats(...) is
    // Встановити вказану кількість сидінь.
  method setEngine(...) is
    // Встановити наданий двигун.
  method setTripComputer(...) is
    // Встановити надану систему навігації.
  method setGPS(...) is
    // Встановити або зняти GPS.
  method getResult(): Car is
    // Повернути поточний об'єкт автомобіля.

// На відміну від інших породжувальних патернів, де продукти
// мають бути частиною одніє ієрархії класів або слідувати
// загальному інтерфейсу, будівельники можуть створювати
// абсолютно різні продукти, які не мають спільного предка.
class CarManualBuilder implements Builder is
  private field manual:Manual
  method reset()
    // Помістити новий об'єкт Manual у полі "manual".
  method setSeats(...) is
    // Описати кількість місць в автівці.
  method setEngine(...) is
    // Додати до посібника опис двигуна.
  method setTripComputer(...) is
    // Додати до посібника опис системи навігації.
  method setGPS(...) is
    // Додати до посібника інструкцію для GPS.
  method getResult(): Manual is
    // Повернути поточний об'єкт посібника.


// Директор знає, в якій послідовності потрібно змушувати
// працювати будівельника, щоб отримати ту чи іншу версію
// продукту. Зауважте, що директор працює з будівельником через
// загальний інтерфейс, завдяки чому він не знає тип продукту,
// який виготовляє будівельник.
class Director is
  method constructSportsCar(builder: Builder) is
    builder.reset()
    builder.setSeats(2)
    builder.setEngine(new SportEngine())
    builder.setTripComputer(true)
    builder.setGPS(true)


// Директор отримує об'єкт конкретного будівельника від клієнта
// (програми). Програма сама знає, якого будівельника
// використати, аби отримати потрібний продукт.
class Application is
  method makeCar() is
    director = new Director()

    CarBuilder builder = new CarBuilder()     director.constructSportsCar(builder)
    Car car = builder.getResult()
    CarManualBuilder builder = new CarManualBuilder()     director.constructSportsCar(builder)

    // Готовий продукт повертає будівельник, оскільки
    // директор частіше за все не знає і не залежить від
    // конкретних класів будівельників та продуктів.
    Manual manual = builder.getResult() Засто­су­ва­ння

Коли ви хоче­те позбу­ти­ся від «теле­ско­пі­чно­го конструктора».

При­пу­сті­мо, у вас є один кон­стру­ктор з деся­тьма опціо­на­льни­ми пара­ме­тра­ми. Його незру­чно викли­ка­ти, тому ви ство­ри­ли ще деся­ть кон­стру­кто­рів з меншою кількі­стю пара­ме­трів. Все, що вони робля­ть, — це пере­адре­со­вую­ть виклик до базо­во­го кон­стру­кто­ра, подаю­чи якісь типо­ві зна­че­ння в пара­ме­три, які від­су­тні в них самих.

class Pizza {
  Pizza(int size) { ... }   Pizza(int size, boolean cheese) { ... }   Pizza(int size, boolean cheese, boolean pepperoni) { ... }
1 ... 15 16 17 ... 58
Перейти на сторінку:

 Увага!

Сайт зберігає кукі вашого браузера. Ви зможете в будь-який момент зробити закладку та продовжити читання книги «Занурення в патерни проектування, Олександр Швець», після закриття браузера.

Подібні книжки до книжки «Занурення в патерни проектування, Олександр Швець» жанру - 💛 Інше:


Коментарі та відгуки (0) до книги "Занурення в патерни проектування, Олександр Швець"