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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 29 30 31 ... 58
Перейти на сторінку:
aria-hidden="true"> Ана­ло­гія з життя

При­клад замов­ле­ння через телефон.

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

Стру­кту­ра

Фасад надає шви­дкий доступ до певної функціо­на­льно­сті під­си­сте­ми. Він «знає», яким кла­сам потрі­бно пере­адре­су­ва­ти запит, і які дані для цього потрібні.

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

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

Класи під­си­сте­ми не знаю­ть про існу­ва­ння фаса­ду і пра­цюю­ть один з одним без­по­се­ре­дньо.

Кліє­нт вико­ри­сто­вує фасад замі­сть без­по­се­ре­дньої робо­ти з об’єкта­ми скла­дної підсистеми.

Псе­вдо­код

У цьому при­кла­ді Фасад спро­щує робо­ту зі скла­дним фре­ймво­рком конве­рта­ції відео.

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

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

// Класи складного стороннього фреймворку конвертації відео. Ми
// не контролюємо цей код, тому не можемо його спростити.

class VideoFile
// ...

class OggCompressionCodec
// ...

class MPEG4CompressionCodec
// ...

class CodecFactory
// ...

class BitrateReader
// ...

class AudioMixer
// ...


// Замість цього, ми створюємо Фасад — простий інтерфейс для
// роботи зі складним фреймворком. Фасад не має всієї
// функціональності фреймворку, але приховує його складність від
// клієнтів.
class VideoConverter is
  method convert(filename, format):File is
    file = new VideoFile(filename)
    sourceCodec = new CodecFactory.extract(file)
    if (format == "mp4")
      destinationCodec = new MPEG4CompressionCodec()
    else
      destinationCodec = new OggCompressionCodec()
    buffer = BitrateReader.read(filename, sourceCodec)
    result = BitrateReader.convert(buffer, destinationCodec)
    result = (new AudioMixer()).fix(result)
    return new File(result)

// Програма не залежить від складного фреймворку конвертації
// відео. До речі, якщо ви раптом вирішите змінити фреймворк,
// вам потрібно буде переписати тільки клас фасаду.
class Application is
  method main() is
    convertor = new VideoConverter()
    mp4 = convertor.convert("funny-cats-video.ogg", "mp4")
    mp4.save() Засто­су­ва­ння

Якщо вам потрі­бно нада­ти про­стий або урі­за­ний інте­рфе­йс до скла­дної підсистеми.

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

Якщо ви хоче­те роз­кла­сти під­си­сте­му на окре­мі рівні.

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

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

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

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

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

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

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

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

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

Абстра­ктна фабри­ка може бути вико­ри­ста­на замі­сть Фаса­ду для того, щоб при­хо­ва­ти пла­тфо­рмо-зале­жні класи.

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

Посе­ре­дник та Фасад схожі тим, що нама­гаю­ться орга­ні­зу­ва­ти робо­ту бага­тьох існую­чих класів.

Фасад ство­рює спро­ще­ний інте­рфе­йс під­си­сте­ми, не вно­ся­чи в неї жодної дода­тко­вої функціо­на­льно­сті. Сама під­си­сте­ма не знає про існу­ва­ння
1 ... 29 30 31 ... 58
Перейти на сторінку:

 Увага!

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

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