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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 31 32 33 ... 58
Перейти на сторінку:
той, який він отри­мує ззо­вні, — зовні­шнім.

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

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

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

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

Псе­вдо­код

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

Легко­ва­го­вик виді­ляє повто­рю­ва­ну части­ну стану з осно­вно­го класу Tree і роз­мі­щує його в дода­тко­во­му класі TreeType.

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

Таким чином, про­гра­ма буде вико­ри­сто­ву­ва­ти наба­га­то менше опе­ра­ти­вної пам’яті, що дозво­ли­ть нама­лю­ва­ти на екра­ні більше дерев, вико­ри­сто­вую­чи те ж саме «залі­зо».

// Цей клас-легковаговик містить лише частину полів, які
// описують дерева. На відміну, наприклад, від координат, ці
// поля не є унікальними для кожного дерева, оскільки декілька
// дерев можуть мати такий самий колір чи текстуру. Тому ми
// переносимо повторювані дані до одного єдиного об'єкта й
// посилаємося на нього з множини окремих дерев.
class TreeType is
  field name
  field color
  field texture
  constructor TreeType(name, color, texture) { ... }
  method draw(canvas, x, y) is
    // 1. Створити зображення даного типу, кольору й
    // текстури.
    // 2. Відобразити його на полотні в позиції X, Y.

// Фабрика легковаговиків вирішує, коли потрібно створити нового
// легковаговика, а коли можна обійтися існуючим.
class TreeFactory is
  static field treeTypes: collection of tree types
  static method getTreeType(name, color, texture) is
    type = treeTypes.find(name, color, texture)
    if (type == null)
      type = new TreeType(name, color, texture)
      treeTypes.add(type)
    return type

// Контекстний об'єкт, з якого ми виділили легковаговик
// TreeType. У програмі можуть бути тисячі об'єктів Tree,
// оскільки накладні витрати на їхнє зберігання зовсім
// невеликі — в пам'яті треба зберігати лише три цілих числа
// (дві координати й посилання).
class Tree is
  field x,y
  field type: TreeType
  constructor Tree(x, y, type) { ... }
  method draw(canvas) is
    type.draw(canvas, this.x, this.y)

// Класи Tree і Forest є клієнтами Легковаговика. За умови, що
// надалі вам не потрібно розширювати клас дерев, їх можна злити
// докупи.
class Forest is
  field trees: collection of Trees

  method plantTree(x, y, name, color, texture) is
    type = TreeFactory.getTreeType(name, color, texture)
    tree = new Tree(x, y, type)
    trees.add(tree)

  method draw(canvas) is
    foreach (tree in trees) do
      tree.draw(canvas) Засто­су­ва­ння

Якщо не виста­чає опе­ра­ти­вної пам’яті для під­трим­ки всіх потрі­бних об’єктів.

Ефе­кти­вні­сть пате­рна Легко­ва­го­вик бага­то в чому зале­жи­ть від того, як і де він вико­ри­сто­вує­ться. Засто­со­ву­йте цей пате­рн у випа­дках, коли вико­на­но всі пере­ра­хо­ва­ні умови:

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

Роз­ді­лі­ть поля класу, який стане легко­ва­го­ви­ком, на дві частини:

вну­трі­шній стан: зна­че­ння цих полів одна­ко­ві для вели­кої кілько­сті об’єктів. зовні­шній стан (конте­кст): зна­че­ння полів уні­ка­льні для кожно­го об’єкта.

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

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

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

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

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

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

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

Пате­рн Легко­ва­го­вик може нага­ду­ва­ти Оди­на­ка, якщо для конкре­тно­го зав­да­ння ви змо­гли зме­нши­ти кількі­сть об’єктів до одно­го. Але пам’ятайте, що між пате­рна­ми є дві суттє­ві відмінності:

На від­мі­ну від Оди­на­ка, ви може­те мати без­ліч об’єктів-легко­ва­го­ви­ків. Об’єкти-легко­ва­го­ви­ки пови­нні бути незмі­нни­ми, тоді як об’єкт-оди­нак допу­скає зміну свого стану.
1 ... 31 32 33 ... 58
Перейти на сторінку:

 Увага!

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

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