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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 21 22 23 ... 58
Перейти на сторінку:
по-перше, це може пору­ши­ти робо­ту наявно­го коду, який уже зале­жи­ть від бібліо­те­ки, по-друге, у вас може про­сто не бути досту­пу до її вихі­дно­го коду. Ріше­ння

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

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

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

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

Іноді вдає­ться ство­ри­ти наві­ть дво­сто­ро­нній ада­птер, який може пра­цю­ва­ти в обох напрямках.

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

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

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

Вміст валіз до й після поїздки за кордон.

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

Стру­кту­ра Ада­птер об’єктів

Ця реа­лі­за­ція вико­ри­сто­вує агре­га­цію: об’єкт ада­пте­ра «заго­ртає», тобто місти­ть поси­ла­ння на слу­жбо­вий об’єкт. Такий під­хід пра­цює в усіх мовах про­гра­му­ва­ння.

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

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

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

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

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

Ада­птер кла­сів

Ця реа­лі­за­ція базує­ться на спа­дку­ва­нні: ада­птер успа­дко­вує оби­два інте­рфе­йси одно­ча­сно. Такий під­хід можли­вий тільки в мовах, які під­три­мую­ть мно­жи­нне спа­дку­ва­ння, напри­клад у C++.

Ада­птер кла­сів не потре­бує вкла­де­но­го об’єкта, тому що він може одно­ча­сно успа­дку­ва­ти й части­ну існую­чо­го класу, й части­ну класу сервісу.

Псе­вдо­код

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

При­клад ада­пта­ції ква­дра­тних кіло­чків та кру­глих отворів.

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

// Класи з сумісними інтерфейсами: КруглийОтвір та
// КруглийКілочок.
class RoundHole is
  constructor RoundHole(radius) { ... }

  method getRadius() is
    // Повернути радіус отвору.

  method fits(peg: RoundPeg) is
    return this.getRadius() >= peg.getRadius()

class RoundPeg is
  constructor RoundPeg(radius) { ... }

  method getRadius() is
    // Повернути радіус круглого кілочка.


// Застарілий несумісний клас: КвадратнийКілочок.
class SquarePeg is
  constructor SquarePeg(width) { ... }

  method getWidth() is
    // Повернути ширину квадратного кілочка.


// Адаптер дозволяє використовувати квадратні кілочки й круглі
// отвори разом.
class SquarePegAdapter extends RoundPeg is
  private field peg: SquarePeg

  constructor SquarePegAdapter(peg: SquarePeg) is
    this.peg = peg

  method getRadius() is
    // Обчислити половину діагоналі квадратного кілочка за
    // теоремою Піфагора.
    return peg.getWidth() * Math.sqrt(2) / 2


// Десь у клієнтському програмному коді.
hole = new RoundHole(5)
rpeg = new RoundPeg(5)
hole.fits(rpeg) // TRUE

small_sqpeg = new SquarePeg(5)
large_sqpeg = new SquarePeg(10)
hole.fits(small_sqpeg) // Помилка компіляції, несумісні типи.

small_sqpeg_adapter = new SquarePegAdapter(small_sqpeg)
large_sqpeg_adapter = new SquarePegAdapter(large_sqpeg)
hole.fits(small_sqpeg_adapter) // TRUE
hole.fits(large_sqpeg_adapter) // FALSE Засто­су­ва­ння

Якщо ви хоче­те вико­ри­ста­ти сто­ро­нній клас, але його

1 ... 21 22 23 ... 58
Перейти на сторінку:

 Увага!

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

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


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