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

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

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

Шрифт:

-
+

Інтервал:

-
+

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

Добавити
1 ... 19 20 21 ... 58
Перейти на сторінку:
є доступ до класу оди­на­ка, отже, буде й доступ до цього ста­ти­чно­го мето­ду. З якої точки коду ви б його не викли­ка­ли, він завжди від­да­ва­ти­ме один і той самий об’єкт. Ана­ло­гія з життя

Уряд держа­ви — вда­лий при­клад Оди­на­ка. У держа­ві може бути тільки один офі­ці­йний уряд. Неза­ле­жно від того, хто конкре­тно засі­дає в уряді, він має гло­ба­льну точку досту­пу «Уряд краї­ни N».

Стру­кту­ра

Оди­нак визна­чає ста­ти­чний метод getInstance, який пове­ртає один екзе­мпляр свого класу.

Кон­стру­ктор Оди­на­ка пови­нен бути при­хо­ва­ний від кліє­нтів. Виклик мето­ду getInstance пови­нен стати єди­ним спосо­бом отри­ма­ти об’єкт цього класу.

Псе­вдо­код

У цьому при­кла­ді роль Оди­на­ка грає клас під­клю­че­ння до бази даних.

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

// Клас одинака визначає статичний метод `getInstance`, котрий
// дозволяє клієнтам повторно використовувати одне і теж
// підключення до бази даних по всій програмі.
class Database is
  // Поле для зберігання об'єкта-одинака має бути оголошено
  // статичним.
  private static field instance: Database

  // Конструктор одинака завжди повинен залишатися приватним,
  // аби клієнти не могли самостійно створювати екземпляри
  // цього класу через оператор `new`.
  private constructor Database() is
    // Тут може жити код ініціалізації підключення до
    // сервера баз даних.
    // ...

  // Головний статичний метод одинака служить альтернативою
  // конструктору і є точкою доступу до екземпляра цього
  // класу.
  public static method getInstance() is
    if (Database.instance == null) then
      acquireThreadLock() and then
        // Про всяк випадок, ще раз перевіримо, чи не
        // було створено об'єкт в іншому потоці, поки
        // даний потік чекав на звільнення блокування.
        if (Database.instance == null) then
          Database.instance = new Database()     return Database.instance

  // І, нарешті, будь-який клас одинака повинен мати якусь
  // корисну функціональність, яку клієнти будуть запускати
  // через отриманий об'єкт одинака.
  public method query(sql) is
    // Усі запити до бази даних проходитимуть через цей
    // метод. Тому є сенс помістити сюди якусь логіку
    // кешування.
    // ...

class Application is
  method main() is
    Database foo = Database.getInstance()     foo.query("SELECT ...")
    // ...
    Database bar = Database.getInstance()     bar.query("SELECT ...")
    // Змінна "bar" містить той самий об'єкт, що і змінна
    // "foo". Засто­су­ва­ння

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

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

Коли ви хоче­те мати більше контро­лю над гло­ба­льни­ми змінними.

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

Тим не менше, будь-коли ви може­те роз­ши­ри­ти це обме­же­ння і дозво­ли­ти будь-яку кількі­сть об’єктів-оди­на­ків, змі­ни­вши код в одно­му місці (метод getInstance).

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

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

Ого­ло­сі­ть ста­ти­чний ство­рюю­чий метод, що вико­ри­сто­ву­ва­ти­ме­ться для отри­ма­ння Одинака.

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

Зро­бі­ть кон­стру­ктор класу приватним.

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

Пере­ва­ги та недо­лі­ки Гара­нтує наявні­сть єди­но­го екзе­мпля­ра класу. Надає гло­ба­льну точку досту­пу до нього. Реа­лі­зує від­кла­де­ну іні­ціа­лі­за­цію об’єкта-оди­на­ка. Пору­шує принцип єди­но­го обов’язку класу. Маскує пога­ний дизайн. Про­бле­ми бага­то­по­то­чно­сті. Вима­гає пості­йно­го ство­ре­ння Mock-об’єктів при юніт-тесту­ва­нні. Від­но­си­ни з інши­ми пате­рна­ми

Фасад можна зро­би­ти Оди­на­ком, оскі­льки зазви­чай потрі­бен тільки один об’єкт-фасад.

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

На від­мі­ну від Оди­на­ка, ви може­те мати без­ліч об’єктів-легко­ва­го­ви­ків. Об’єкти-легко­ва­го­ви­ки пови­нні бути незмі­нни­ми, тоді як об’єкт-оди­нак допу­скає зміну свого стану.

Абстра­ктна фабри­ка, Буді­ве­льник та Про­то­тип можу­ть реа­лі­зо­ву­ва­ти­ся за допо­мо­гою Оди­на­ка.

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

Ада­птер
1 ... 19 20 21 ... 58
Перейти на сторінку:

 Увага!

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

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


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