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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 17 18 19 ... 58
Перейти на сторінку:

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

Попе­ре­дньо заго­тов­ле­ні про­то­ти­пи можу­ть стати замі­ною підкласів.

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

Ана­ло­гія з життя

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

При­клад поді­лу клітини.

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

Стру­кту­ра Базо­ва реа­лі­за­ція

Інте­рфе­йс про­то­ти­пів опи­сує опе­ра­ції кло­ну­ва­ння. Для більшо­сті випа­дків — це єди­ний метод clone.

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

Кліє­нт ство­рює копію об’єкта, зве­ртаю­чи­сь до нього через зага­льний інте­рфе­йс прототипів.

Реа­лі­за­ція зі спі­льним схо­ви­щем про­то­ти­пів

Схо­ви­ще про­то­ти­пів поле­гшує доступ до часто вико­ри­сто­ву­ва­них про­то­ти­пів, збе­рі­гаю­чи попе­ре­дньо ство­ре­ний набір ета­ло­нних, гото­вих до копію­ва­ння об’єктів. Най­про­сті­ше схо­ви­ще може бути побу­до­ва­но за допо­мо­гою хеш-табли­ці виду ім'я-прототипу → прототип. Для поле­гше­ння пошу­ку про­то­ти­пи можна марку­ва­ти ще й за інши­ми кри­те­рія­ми, а не тільки за умо­вним іменем.

Псе­вдо­код

У цьому при­кла­ді Про­то­тип дозво­ляє роби­ти точні копії об’єктів гео­ме­три­чних фігур без прив’язки до їхніх класів.

При­клад кло­ну­ва­ння ієра­рхії гео­ме­три­чних фігур.

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

// Базовий прототип.
abstract class Shape is
  field X: int
  field Y: int
  field color: string

  // Звичайний конструктор.
  constructor Shape() is
    // ...

  // Конструктор прототипа.
  constructor Shape(source: Shape) is
    this()
    this.X = source.X
    this.Y = source.Y
    this.color = source.color

  // Результатом операції клонування завжди буде об'єкт з
  // ієрархії класів Shape.
  abstract method clone(): Shape


// Конкретний прототип. Метод клонування створює новий об'єкт
// поточного класу, передаючи до конструктора посилання на
// власний об'єкт. Завдяки цьому, клонування виходить
// атомарним — доки не виконається конструктор, нового об'єкта
// ще не існує. Але як тільки конструктор завершено, ми
// отримаємо завершений об'єкт-клон, а не порожній об'єкт, який
// потрібно ще заповнити.
class Rectangle extends Shape is
  field width: int
  field height: int

  constructor Rectangle(source: Rectangle) is
    // Виклик батьківського конструктора потрібен, щоб
    // скопіювати потенційні приватні поля, оголошені в
    // батьківському класі.
    super(source)
    this.width = source.width
    this.height = source.height

  method clone(): Shape is
    return new Rectangle(this)


class Circle extends Shape is
  field radius: int

  constructor Circle(source: Circle) is
    super(source)
    this.radius = source.radius

  method clone(): Shape is
    return new Circle(this)


// Десь у клієнтському програмному коді.
class Application is
  field shapes: array of Shape

  constructor Application() is
    Circle circle = new Circle()     circle.X = 10
    circle.Y = 10
    circle.radius = 20
    shapes.add(circle)

    Circle anotherCircle = circle.clone()     shapes.add(anotherCircle)
    // anotherCircle буде містити точну копію circle.

    Rectangle rectangle = new Rectangle()     rectangle.width = 10
    rectangle.height = 20
    shapes.add(rectangle)

  method businessLogic() is
    // Неочевидний плюс Прототипу в тому, що ви можете
    // клонувати набір об'єктів, не знаючи їхніх конкретних
    // класів.
    Array shapesCopy = new Array of Shapes.
    // Наприклад, ми не знаємо, які конкретно об'єкти
    // знаходяться всередині масиву shapes так як його
    // оголошено з типом Shape. Але завдяки поліморфізму, ми
    // можемо клонувати усі об'єкти «наосліп». Буде виконано
    // метод clone того класу, яким є цей об'єкт.
    foreach (s in shapes) do
      shapesCopy.add(s.clone())

    // Змінна shapesCopy буде містити точні копії елементів
    // масиву shapes. Засто­су­ва­ння

Коли ваш код не пови­нен зале­жа­ти від кла­сів об’єктів, при­зна­че­них для копіювання.

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

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

1 ... 17 18 19 ... 58
Перейти на сторінку:

 Увага!

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

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


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