Page 56 - 4190
P. 56

терфейсу патерн Adapter вводить таку ієрархію класів:
                  1. Віртуальний базовий клас Target. Тут оголошується призначе-
            ний для користувача інтерфейс відповідного виду. Тільки цей інтер-
            фейс доступний для користувача.

                  2. Похідний клас Adapter, що реалізує інтерфейс Target. У цьому
            класі також є вказівник або посилання на екземпляр Adapter. Патерн
            Adapter використовує цей вказівник для перенаправлення клієнтських

            викликів  в  Adapter.  Оскільки  інтерфейси  Adapter  і  Target  несумісні
            між собою, то ці виклики зазвичай вимагають перетворення.
                  UML-діаграма класів патерну Adapter зображена на рисунку 6.1.




























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

                  Приведемо  реалізацію  патерну  Adapter.  Для  наведеного  вище
            прикладу  адаптуємо  значення  температурного  датчика  системи  клі-

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

            тримує  функцію  юстирування  для  отримання  точніших  показів.  Ця
            функція не є обов'язковою для використання, можливо, тому відпові-
            дний  метод  adjust()  оголошений  розробниками  захищеним  в  існую-
            чому класі FahrenheitSensor.

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

            Adapter тут вже не підходить. Єдине рішення – наслідувати від класу
            FahrenheitSensor.  Інтерфейс  цього  класу  повинен  залишатися  недо-


                                                              56
   51   52   53   54   55   56   57   58   59   60   61