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