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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 54 55 56 ... 58
Перейти на сторінку:
кожно­го етапу, буді­ве­льни­ки можу­ть роби­ти неве­ли­кі зміни на кожно­му з ета­пів, щоб зро­би­ти буди­нок трі­ше­чки не схо­жим на інші. Стру­кту­ра

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

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

Псе­вдо­код

У цьому при­кла­ді Шабло­нний метод вико­ри­сто­вує­ться як заго­то­вка для ста­нда­ртно­го шту­чно­го інте­ле­кту в про­стій стра­те­гі­чній грі. Для вве­де­ння в гру нової раси доста­тньо ство­ри­ти під­клас і реа­лі­зу­ва­ти в ньому від­су­тні методи.

При­клад кла­сів шту­чно­го інте­ле­кту для про­стої гри.

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

class GameAI is
  // Шаблонний метод повинен бути заданий у базовому класі.
  // Він складається з викликів методів у певному порядку.
  // Здебільшого, ці методи є кроками якогось алгоритму.
  method turn() is
    collectResources()
    buildStructures()
    buildUnits()
    attack()

  // Деякі з цих методів можуть бути реалізовані безпосередньо
  // у базовому класі.
  method collectResources() is
    foreach (s in this.builtStructures) do
      s.collect()

  // А деякі можуть бути повністю абстрактними.
  abstract method buildStructures()
  abstract method buildUnits()

  // До речі, клас може мати більше одного шаблонного методу.
  method attack() is
    enemy = closestEnemy()
    if (enemy == null)
      sendScouts(map.center)
    else
      sendWarriors(enemy.position)

  abstract method sendScouts(position)
  abstract method sendWarriors(position)

// Підкласи можуть надавати свою реалізацію кроків алгоритму, не
// змінюючи сам шаблонний метод.
class OrcsAI extends GameAI is
  method buildStructures() is
    if (there are some resources) then
      // Будувати ферми, потім бараки, а потім цитадель.

  method buildUnits() is
    if (there are plenty of resources) then
      if (there are no scouts)
        // Побудувати раба, додати до групи розвідників.
      else
        // Побудувати піхотинця, додати до групи воїнів.

  // ...

  method sendScouts(position) is
    if (scouts.length > 0) then
      // Відправити розвідників на позицію.

  method sendWarriors(position) is
    if (warriors.length > 5) then
      // Відправити воїнів на позицію.

// Підкласи можуть не тільки реалізовувати абстрактні кроки, але
// й перевизначати кроки, вже реалізовані в базовому класі.
class MonstersAI extends GameAI is
  method collectResources() is
    // Нічого не робити.

  method buildStructures() is
    // Нічого не робити.

  method buildUnits() is
    // Нічого не робити. Засто­су­ва­ння

Якщо під­кла­си пови­нні роз­ши­рю­ва­ти базо­вий алго­ри­тм, не змі­нюю­чи його структури.

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

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

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

Це дозво­ли­ть при­бра­ти дублю­ва­ння коду в кількох кла­сах, які від­рі­зняю­ться дета­ля­ми, але мають схожу поведінку.

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

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

Ство­рі­ть абстра­ктний базо­вий клас. Визна­чте в ньому шабло­нний метод. Цей метод пови­нен скла­да­ти­ся з викли­ків кро­ків алго­ри­тму. Є сенс у тому, щоб зро­би­ти шабло­нний метод фіна­льним, аби під­кла­си не могли пере­ви­зна­чи­ти його (якщо ваша мова про­гра­му­ва­ння це дозволяє).

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

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

Ство­рі­ть конкре­тні класи, успа­дку­ва­вши їх від абстра­ктно­го класу. Реа­лі­зу­йте в них всі кроки та хуки, яких не вистачає.

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

Фабри­чний метод можна роз­гля­да­ти як окре­мий випа­док Шабло­нно­го мето­ду. Крім того,

1 ... 54 55 56 ... 58
Перейти на сторінку:

 Увага!

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

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