Page 51 - 4190
P. 51

ємопов’язаних одиночок з'являються нові питання:
                    як  гарантувати,  щодо  моменту  використання  одного  класу
            Singleton екземпляр іншого залежного вже створений?
                    як  забезпечити  можливість  безпечного  використання  одного

            класу Singleton іншим при завершенні програми? Іншими словами, як
            гарантувати, що у момент знищення першого сингелтона в його де-
            структорі  ще  можливе  використання  другого  залежного  сингелтона

            (тобто другий сингелтон до цього моменту ще не зруйнований)?
                  Незважаючи на уявну простоту патерну Singleton (використову-
            ється всього один клас), його реалізація не є тривіальною.
                  Патерн Singleton має такі переваги:

                    клас сам контролює процес створення єдиного екземпляра;
                    патерн легко адаптувати для створення потрібного числа екзе-
            мплярів;

                    можливість створення об'єктів класів, похідних від Singleton.
                  Недоліки патерну Singleton полягають в тому, що у разі викорис-
            тання  декількох  взаємозалежних  одиночок  їх  реалізація  може  різко

            ускладнитися.
                  Патерн Abstract Factory
                  Абстрактна  фабрика  (Abstract Factory)  — подає інтерфейс  для

            утворення  родин  взаємозв'язаних  або  взаємозалежних  об'єктів,  не
            специфікуючи їхніх конкретних класів.
                  Шаблон Абстрактна фабрика слід використовувати, якщо:
                    система не повинна залежати від того, як утворюються, компо-

            нуються та представляються вхідні до неї об'єкти;
                    вхідні до родини взаємозв'язані об'єкти повинні використовува-
            тися разом і необхідно забезпечити виконання цього обмеження;

                    система повинна конфігуруватися однією з родин складаючих
            її об'єктів;
                    треба  подати  бібліотеку  об'єктів,  розкриваючи  тільки  їхні  ін-
            терфейси, але не реалізацію.

                  UML-діаграма,  що  описує  структуру  шаблону  проектування
            Abstract Factory представлена на рисунку 5.6.

                  Патерн Lazy initialization
                  Відкладена  (лінива)  ініціалізація  (Lazy  initialization)  –  прийом  у
            програмуванні, коли деяка ресурсномістка операція (створення об'єк-
            та,  обчислення  значення)  виконується  безпосередньо  перед  тим,  як

            буде  використаний  її  результат.  Таким  чином,  ініціалізація  викону-
            ється «на вимогу», а не завчасно. Аналогічна ідея знаходить застосу-

                                                              51
   46   47   48   49   50   51   52   53   54   55   56