Читайте также:
|
|
При разработке архитектуры часто применяются паттерны проектирования - готовые решения определённых проблем.
Главная польза каждого отдельного шаблона состоит в том, что он описывает решение целого класса абстрактных проблем. Также тот факт, что каждый шаблон имеет свое имя, облегчает дискуссию об абстрактных структурах данных между разработчиками, так как они могут ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация терминологии, названий модулей и элементов проекта.
Условно все паттерны можно разделить на:
1. Структурные
2. Порождающие
3. Паттерны поведения
Рассмотрим некоторые из них.
Адаптер (adapter, wrapper)
Назначение: Преобразует интерфейс одного класса в интерфейс другого, который
ожидают клиенты. Адаптер обеспечивает совместную работу классов с несовместимыми
интерфейсами, которая без него была бы невозможна.
Применять адаптер следует, когда Вы:
· Хотите использовать существующий класс, но его интерфейс не соответствует вашимпотребностям;
· Собираетесь создать повторно используемый класс, который должен взаимодействоватьс заранее неизвестными или не связанными с ним классами, имеющими несовместимыеинтерфейсы;
· Видите необходимость использовать несколько существующих подклассов, нонепрактично адаптировать их интерфейсы путем порождения новых подклассов откаждого. В этом случае адаптер объектов может приспосабливать интерфейс их общегородительского класса.
·
Адаптер класса использует множественное наследование для адаптации одного интерфейса кдругому. Адаптер объекта применяет композицию объектов.
Абстрактная фабрика (abstractfactory, kit)
Назначение: предоставляет интерфейс для создания семейств взаимосвязанных или
взаимозависимых объектов, не специфицируя их конкретных классов.
Используйте абстрактную фабрику, когда:
· Система не должна зависеть от того, как создаются, компонуются и представляютсявходящие в нее объекты;
· Входящие в семейство взаимосвязанные объекты должны использоваться вместе, и вамнеобходимо обеспечить выполнение этого ограничения;
· Вы хотите предоставить библиотеку объектов, раскрывая только их интерфейсы, но нереализацию.
Плюсы и минусы абстрактной фабрики:
· Изолирует конкретные классы. Поскольку фабрика инкапсулирует ответственностьза создание классов и сам процесс их создания, то она изолирует клиента от деталейреализации классов. Клиенты манипулируют экземплярами через их абстрактныеинтерфейсы.
· Упрощает замену семейств продуктов. Класс конкретной фабрики появляется в
приложении только один раз: при инстанцировании. Это облегчает замену используемойприложением конкретной фабрики. Приложение может изменить конфигурациюпродуктов, просто подставив новую конкретную фабрику.
· Гарантирует сочетаемость продуктов. Если продукты некоторого семейства
спроектированы для совместного использования, то важно, чтобы приложение в каждыймомент времени работало только с продуктами единственного семейства.
Абстрактнаяфабрика позволяет легко соблюсти это ограничение;
Поддержать новый вид продуктов трудно. Расширение абстрактной фабрики дляизготовления новых продуктов – непростая задача. Интерфейс фиксирует наборпродуктов, которые можно создать. Для поддержки новых продуктов необходиморасширить интерфейс фабрики и изменить все подклассы.
Стратегия (strategy, policy)
Назначение: определяет семейство алгоритмов, инкапсулирует каждый из них и делает извзаимозаменяемыми. Стратегия позволяет изменять алгоритмы независимо от клиентов, которыеими пользуются.
Используйте паттерн стратегия, когда:
· Имеется много родственных классов, отличающихся только поведением. Стратегия
позволит сконфигурировать класс, задав одно из возможных поведений;
· Вам нужно иметь несколько разных вариантов алгоритма. Например, можно определитьдва варианта алгоритма, один из которых требует больше времени, а другой – большепамяти;
· В алгоритме содержатся данные, о которых клиент не должен «знать».
· Используйте паттерн стратегия, чтобы не раскрывать сложные, специфичные для алгоритма структурыданных;
· В классе определено много поведений, что предоставлено разветвленными условнымиоператорами. В этом случае проще перенести код из ветвей в отдельные классы стратегий.
Достоинства и недостатки паттерна стратегия:
· Семейства родственных алгоритмов. Иерархия классов Strategy определяет семействоалгоритмов или поведений, которые можно повторно использовать в разных контекстах.
· Наследование позволяет вычленить общую для всех алгоритмов функциональность.
· Альтернатива порождению подклассов. Наследование поддерживает многообразие
алгоритмов или поведений. Можно напрямую породить от Context подклассы с
различными поведениями. Но при этом поведение жестко «замешивается» в класс
Context. Реализация алгоритма и контекста смешиваются, что затрудняет понимание,сопровождение и расширение контекста. Кроме того, заменить алгоритм динамическиуже не удастся. В результате вы получите множество родственных классов, отличающихсятолько алгоритмом или поведением. Инкапсуляция алгоритма в отдельный класспозволяет изменять его независимо от контекста;
· С помощью стратегии можно избавиться от условных операторов при выборе нужногоповедения. Если код содержит много условных операторов, то часто это признак того, чтонужно применить паттерн стратегия;
Дата добавления: 2015-08-27; просмотров: 65 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Отличие архитектуры ПО от детального проектирования ПО | | | Команды в проекте |