code it easy with grasp patterns.pptx
TRANSCRIPT
Patterns list Creator
Information Expert
Low Coupling
Controller
High Cohesion
Polymorphism
Pure Fabrication
Indirection
Protected Variations
Creator
Проблема
Решение
Кто отвечает за создание нового экземпляра некоторого класса А?
Назначить классу В обязанность создавать экземпляры класса А, если класс В содержит, записывает, активно использует класс А или обладает данными инициализации для объектов А
Information Expert
Проблема
Решение
Каков базовый принцип распределения обязанностей между объектами?
Назначить эту обязанность тому классу, который обладает достаточнойинформацией для ее выполнения
Low Coupling
Проблема
Решение
Как уменьшить влияние вносимых изменений на другие объекты?
Минимизировать степень связывания объектов в процессе распределения обязанностей
Controller
ПроблемаКто должен отвечать за получение и координацию выполнения системных операций, поступающих от уровня интерфейса пользователя?
ControllerРешение
Присвоить эту обязанность классу, удовлетворяющему одному из следующих условий: Класс представляет всю систему в целом,
корневой объект, устройство или важную подсистему (внешний контроллер)
Класс представляет сценарий некоторого прецедента, в рамках которого выполняется обработка этой системной операции (контроллерпрецедента или контроллер сеанса)
ControllerРекомендации
Для различных прецедентов логично использовать разные контроллеры (контроллеры прецедентов) - контроллеры не должны быть перегружены. Внешний контроллер представляет всю систему целиком, его можно использовать, если он будет не слишком перегруженным (то есть, если существует лишь несколько системных событий)
High Cohesion
ПроблемаКак обеспечить сфокусированность обязанностей объектов, их управляемость и ясность, а заодно выполнение принципа Low Coupling?
High Cohesion
РешениеОбеспечивать высокий уровень зацепления в процессе распределения обязанностей. Этот принцип нужно использовать для оценки различных альтернатив
Polymorphism
ПроблемаКак обрабатывать альтернативные варианты поведения на основетипа? Как создавать подключаемые программные компоненты?
РешениеОбязанности распределяются для различных вариантов поведения с использованием полиморфных операций для этого класса
Pure FabricationПроблема
Какой класс должен обеспечить реализацию шаблонов High Cohesion и Low Coupling или других принципов проектирования, если шаблон Expert (например) не обеспечивает подходящего решения?
Pure Fabrication
РешениеПрисвоить группу обязанностей с высокой степенью зацепления искусственному классу, не представляющему конкретного понятия предметной области,т.е. синтезировать искусственную сущность для поддержки высокого зацепления, слабого связывания и повторного использования
Pure Fabrication. Пример Какой класс должен сохранять экземпляры
класса "Продажа" в реляционной базе данных?
Если возложить эту обязанность на класс "Продажа", то будем иметь низкую степень зацепления и высокую степень связывания (поскольку класс "Продажа" должен быть связан с интерфейсом реляционной базы данных.
Хранение объектов в реляционной базе данных - это общая задача, которую придется решать для многих классов
Pure Fabrication
РешениеСоздать класс PersistentStorage, ответственный за сохранение обьектов некоторого вида в базе данных
IndirectionПроблема
Как распределить обязанности, чтобы обеспечить отсутствие прямого связывания; снизить уровень связывания объектов, согласно шаблону Low Coupling,и сохранить высокий потенциал повторного использования?
РешениеПрисвоить обязанности по обеспечению связи между службами или компонентами промежуточному объекту
IndirectionСвязанные шаблоны и принципы
Protected variations Low Coupling Многие шаблоны GoF, в том числе Adapter,
Bridge, Observer и Mediator Различные частные случаи использования
шаблона Pure Fabrication
Protected VariationsПроблема
Как спроектировать объекты, подсистемы и систему, чтобы изменение этих элементов не оказывало нежелательного влияния на другие элементы?
РешениеИдентифицировать точки возможных вариаций или неустойчивости;распределить обязанности таким образом, чтобы обеспечить устойчивый интерфейс