Page 53 - 4190
P. 53

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

                  Можна  побачити  сумісне  використання  Пула  об'єктів  та  інших
            шаблонів проектування. Наприклад, для створення об'єктів в конкре-
            тному стані можна використати Прототип. А за допомогою Одинака

            — створити єдиний екземпляр Пула в системі.
                  Поганою  практикою  вважається  приховування  Пула  за  іншими
            шаблонами  проектування.  Розробник,  який використовує  такий  під-
            хід,  не  очікує  вимоги  повернення  об'єктів,  наприклад,  Фабричного

            методу. А без повернення об'єктів сам Пул стає непотрібним. У тако-
            му випадку, правильним рішенням буде відділити реалізацію класів,
            що створюють об'єкти.

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

            ковий стан (скидання). Наявність об'єктів у невизначеному стані пе-
            ретворює Пул в «об'єктну клоаку» (object cesspool). Повторне викори-
            стання може стати причиною витоку конфіденційної інформації. То-

            му  обов'язково  необхідно  зчищати  поля  з  секретними  даними  при
            скиданні, а самі дані — знищувати. Можлива ситуація, коли в Пулі не
            залишиться вільних об'єктів. У такому випадку реакція на запит може
            бути такою:

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

                  UML-діаграма класів патерну Object Pool зображена на рисунку 5.7.











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


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

                                                              53
   48   49   50   51   52   53   54   55   56   57   58