|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Проблемні предметні області. 1. Існує багато алгоритмів сортування даних
1. Існує багато алгоритмів сортування даних. Жорстко «зашивати» всі подібні алгоритми в класи, які їх потребують, небажано з декількох причин: - клієнт, якому потрібен алгоритм сортування, ускладнюється при включенні до нього відповідного коду. Таким чином, клієнти стають більш громіздкими, а супроводжувати їх важче, особливо якщо потрібно підтримати відразу декілька алгоритмів; - в залежності від обставин варто застосовувати той чи інший алгоритм. Не хотілося б підтримувати декілька алгоритмів сортування, якщо ми не будемо ними користуватися; - якщо сортування – невід’ємна частина клієнта, то завдання додавання нових і модифікація існуючих алгоритмів ускладнюється. Цих проблем можна уникнути, якщо визначити класи, що інкапсулюють різні алгоритми сортування. Алгоритм інкапсульований таким чином називається стратегією. 2. Додаток, призначений для компресії файлів використовує один з доступних алгоритмів: zіp, arj або rar. Об’єктно-орієнтований дизайн такої програми може бути побудований на ідеї використання поліморфізму. В результаті одержуємо набір родинних класів із загальним інтерфейсом і різними реалізаціями алгоритмів (рис. 6.31).
Рис. 6.31. Схема класів із загальним інтерфейсом
Представленому підходу властиві наступні недоліки: - реалізація алгоритму жорстко прив’язана до його підкласу, що затрудняє підтримку і розширення такої системи; - система, побудована на основі спадкування, є статичною. Замінити один алгоритм на іншій в ході виконання програми вже неможливо. Застосування паттерна Strategy дозволяє усунути зазначені недоліки. Паттерн Strategy переносить в окрему ієрархію класів усі деталі, пов’язані з реалізацією алгоритмів. Для випадку програми стиску файлів абстрактний базовий клас Compressіon цієї ієрархії оголошує інтерфейс, загальний для всіх алгоритмів і використовуваний класом Compressor. Підкласи ZІ_Compressіon, ARJ_Compressіon і RAR_Compressіon його реалізують відповідно до того або іншого алгоритму. Клас Compressor містить покажчик на об’єкт абстрактного типу Compressіon і призначений для переадресації користувальницьких запитів конкретному алгоритму. Для заміни одного алгоритму іншим досить перенастроїти цей покажчик на об’єкт потрібного типу (рис. 6.32).
Рис. 6.32. Діаграма класів після застосування паттерна
Архітектура паттерна представлена у вигляді діаграми класів на рис. 6.33.
Рис. 6.33. Діаграма класів паттерна Стратегія
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |