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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 52 53 54 ... 58
Перейти на сторінку:
В цих кла­сах буде визна­че­но лише один метод, що при­ймає в пара­ме­трах коо­рди­на­ти поча­тку та кінця маршру­ту, а пове­ртає масив всіх точок маршруту.

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

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

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

Різні стра­те­гії потра­пля­ння до аеропорту.

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

Стру­кту­ра

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

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

Для конте­кс­ту нева­жли­во, яка саме варіа­ція алго­ри­тму буде обра­на, оскі­льки всі вони мають одна­ко­вий інтерфейс.

Конкре­тні стра­те­гії реа­лі­зую­ть різні варіа­ції алгоритму.

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

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

Псе­вдо­код

У цьому при­кла­ді конте­кст вико­ри­сто­вує Стра­те­гію для вико­на­ння тієї чи іншої ари­фме­ти­чної операції.

// Загальний інтерфейс стратегій.
interface Strategy is
  method execute(a, b)

// Кожна конкретна стратегія реалізує загальний інтерфейс у свій
// власний спосіб.
class ConcreteStrategyAdd implements Strategy is
  method execute(a, b) is
    return a + b

class ConcreteStrategySubtract implements Strategy is
  method execute(a, b) is
    return a - b

class ConcreteStrategyMultiply implements Strategy is
  method execute(a, b) is
    return a * b

// Контекст завжди працює зі стратегіями через загальний
// інтерфейс. Він не знає, яку саме стратегію йому подано.
class Context is
  private strategy: Strategy

  method setStrategy(Strategy strategy) is
    this.strategy = strategy

  method executeStrategy(int a, int b) is
    return strategy.execute(a, b)


// Конкретна стратегія вибирається на більш високому рівні,
// наприклад, конфігуратором всієї програми. Готовий об'єкт-
// стратегія подається до клієнтського об'єкта, а потім може
// бути замінений іншою стратегією, в будь-який момент, «на
// льоту».
class ExampleApplication is
  method main() is
    // 1. Створити об'єкт контексту.
    // 2. Ввести перше число (n1).
    // 3. Ввести друге число (n2).
    // 4. Ввести бажану операцію.
    // 5. Потім, обрати стратегію:

    if (action == addition) then
      context.setStrategy(new ConcreteStrategyAdd())

    if (action == subtraction) then
      context.setStrategy(new ConcreteStrategySubtract())

    if (action == multiplication) then
      context.setStrategy(new ConcreteStrategyMultiply())

    // 6. Виконати операцію за допомогою стратегії:
    result = context.executeStrategy(n1, n2)

    // N. Вивести результат на екран. Засто­су­ва­ння

Якщо вам потрі­бно вико­ри­сто­ву­ва­ти різні варіа­ції якого-небу­дь алго­ри­тму все­ре­ди­ні одно­го об’єкта.

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

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

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

Якщо ви не хоче­те ого­лю­ва­ти дета­лі реа­лі­за­ції алго­ри­тмів для інших класів.

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

Якщо різні варіа­ції алго­ри­тмів реа­лі­зо­ва­но у вигля­ді роз­ло­го­го умо­вно­го опе­ра­то­ра. Кожна гілка тако­го опе­ра­то­ра є варіа­цією алгоритму.

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

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

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

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

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

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

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

Пере­ва­ги та недо­лі­ки
1 ... 52 53 54 ... 58
Перейти на сторінку:

 Увага!

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

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