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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 25 26 27 ... 58
Перейти на сторінку:
ви не «тоне­те» в горах карто­ну та скотчу. Ана­ло­гія з життя

При­клад армі­йської структури.

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

Стру­кту­ра

Компо­не­нт опи­сує зага­льний інте­рфе­йс для про­стих і скла­до­вих компо­не­нтів дерева.

Лист — це про­стий компо­не­нт дере­ва, який не має від­га­лу­же­нь. Класи листя місти­ти­му­ть більшу части­ну кори­сно­го коду, тому що їм ніко­му пере­да­ва­ти його виконання.

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

Мето­ди конте­йне­ра пере­адре­со­вую­ть осно­вну робо­ту своїм дочі­рнім компо­не­нтам, хоча можу­ть дода­ва­ти щось своє до результату.

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

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

Псе­вдо­код

У цьому при­кла­ді Компо­ну­ва­льник допо­ма­гає реа­лі­зу­ва­ти вкла­де­ні гео­ме­три­чні фігури.

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

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

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

// Загальний інтерфейс компонентів.
interface Graphic is
  method move(x, y)
  method draw()

// Простий компонент.
class Dot implements Graphic is
  field x, y

  constructor Dot(x, y) { ... }

  method move(x, y) is
    this.x += x, this.y += y

  method draw() is
    // Намалювати крапку у координатах X, Y.

// Компоненти можуть розширювати інші компоненти.
class Circle extends Dot is
  field radius

  constructor Circle(x, y, radius) { ... }

  method draw() is
    // Намалювати коло в координатах X, Y з радіусом R.

// Контейнер містить операції додавання/видалення дочірніх
// компонентів. Усі стандартні операції інтерфейсу компонентів
// він делегує кожному з дочірніх компонентів.
class CompoundGraphic implements Graphic is
  field children: array of Graphic

  method add(child: Graphic) is
    // Додати компонент до списка дочірніх.

  method remove(child: Graphic) is
    // Прибрати компонент зі списку дочірніх.

  method move(x, y) is
    foreach (child in children) do
      child.move(x, y)

  method draw() is
    // 1. Для кожного дочірнього компонента:
    //     - Відобразити компонент.
    //     - Визначити координати максимальної межі.
    // 2. Намалювати пунктирну межу навколо всієї області.


// Програма працює одноманітно, як з одиничними компонентами,
// так і з цілими групами компонентів.
class ImageEditor is
  field all: CompoundGraphic

  method load() is
    all = new CompoundGraphic()
    all.add(new Dot(1, 2))
    all.add(new Circle(5, 3, 10))
    // ...

  // Групування обраних компонентів в один складний компонент.
  method groupSelected(components: array of Graphic) is
    group = new CompoundGraphic()
    foreach (component in components) do
      group.add(component)
      all.remove(component)
    all.add(group)
    // Усі компоненти будуть промальованими.
    all.draw() Засто­су­ва­ння

Якщо вам потрі­бно пре­д­ста­ви­ти дере­во­по­ді­бну стру­кту­ру об’єктів.

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

Якщо кліє­нти пови­нні одна­ко­во тра­кту­ва­ти про­сті та скла­до­ві об’єкти.

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

Кроки реа­лі­за­ції

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

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

Ство­рі­ть клас компо­не­нтів-листя, які не мають пода­льших від­га­лу­же­нь. Майте на увазі, що про­гра­ма може місти­ти декі­лька таких класів.

Ство­рі­ть клас компо­не­нтів-конте­йне­рів і додайте до нього масив для збе­рі­га­ння поси­ла­нь на вкла­де­ні компо­не­нти. Цей масив пови­нен бути зда­тен місти­ти

1 ... 25 26 27 ... 58
Перейти на сторінку:

 Увага!

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

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


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