Page 49 - 4190
P. 49

Недоліком патерну Factory Method є те, що у випадку класичного
            варіанту  патерну  навіть  для  породження  єдиного  об'єкту  необхідно
            створювати відповідну фабрику
                  Патерн Singleton

                  Часто в системі можуть існувати сутності тільки в єдиному екзе-
            мплярі, наприклад, система ведення системного журналу повідомлень
            або драйвер дисплея. У таких випадках необхідно уміти створювати

            єдиний екземпляр деякого типу, надавати до нього доступ ззовні і за-
            бороняти створення декількох екземплярів того ж типу. Такі можли-
            вості надає патерн Singleton (одинак).
                  Архітектура  патерну  Singleton  заснована  на  ідеї  використання

            глобальної змінної, що має такі важливі властивості:
                   така змінна доступна завжди, а час життя глобальної змінної –

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

                  Проте,  використати  глобальну  змінну  деякого  типу  безпосеред-
            ньо неможливо, оскільки існує проблема забезпечення єдиності екзе-
            мпляра, а саме, можливе створення декількох змінних того ж самого

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

            вник або посилання на нього. Цей об'єкт буде створений тільки при
            першому зверненні до методу, а усі подальші виклики просто повер-
            тають його адресу. Для забезпечення унікальності об'єкту, конструк-

            тори і оператор присвоєння оголошуються закритими.
                  UML-діаграма класів патерну Singleton зображена на рисунку 5.5.

















                           Рисунок 5.5 – UML-діаграма класів патерну Singleton



                                                              49
   44   45   46   47   48   49   50   51   52   53   54