- Принципи проектирования
- Strategy
- Observer
- Decorator
- Simple Factory
- Factory Method
- Abstract Factory
- Command
- Adapter
- Facade
- TemplateMethod
- Iterator
- Composite
- State
- Выделите аспекты приложения, которые могут изменяться, и отделите их от тех, которые всегда остаються постоянными.
- Выделите то, что изменяеться, и "инкапсулируйте" эти аспекти, чтобы они не влияли на роботу остального кода.
- Результат? Меньше непревиденных последствий от изменения кода, большая гибкость ваших систем!
- Програмируйте на уровне интерфейсов, а не на уровне реализации.
- Отдавайте предпочтение композиции перед наследованием.
- Слабосвязаные обьекты.
- Если два обьекта могут взаимодествовать, не обладая практически никакой информацие друг о друге, такие обьекты называються слабосвязанными.
- Open/Closed
- Классы должны быть открыты для расширения, но закрыты для изменения.
- Принцип инверсии зависимости
- Код должен зависить от абстракци, а не от конкретных классов.
- Высокоуровневые компоненты не должны зависить от низкоуровневых компонентов, вместо этого и те и другие должны зависить от абстракций
- Принцип минимальной информированости: общайтесь только с близкими друьями. (in facade pattern)
- Не вызывайте нас - мы вас сами вызовем (in template method)
- Клас должен иметь только одну причину для изменения (iterator)
Паттерн Стратегия определят семейство алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость. Он позволяет модифицировать алгоритмы независимо от их использования на стороне клиента.
- Выделите аспекты приложения, которые могут изменяться, и отделите их от тех, которые всегда остаються постоянными.
- Выделите то, что изменяеться, и "инкапсулируйте" эти аспекти, чтобы они не влияли на роботу остального кода.
- Результат? Меньше непревиденных последствий от изменения кода, большая гибкость ваших систем!
- Програмируйте на уровне интерфейсов, а не на уровне реализации.
- Отдавайте предпочтение композиции перед наследованием.
https://www.youtube.com/watch?v=v9ejT8FO-7I&t=0s&list=PLrhzvIcii6GNjpARdnO4ueTUAVR9eMBpc&index=2
Паттер Наблюдатель определяет отношение "один-ко-многим" между обьектами таким образом, что при изменении стостояния одного обьекта происходит автоматическое оповещение и обновление всех зависимых обьектов.
В архитектуре паттерна Наблюдатель между судьектами и наблюдателями существует слабая связь:
- Единственнок, что знает субьект о наблюдателе, - то, что тот реализует некоторый интерфейс (Observer). Ему не нужно знать никонкретный класс наблюдателя, ни его функциональность... ничего.
- Новый наблюдатели могут добавляться в любой момент. Так как субьект зависит только от списка обьектов, реализуещих интерфейс Observer, вы можете добавлять новых наблюдателей по своему усмотрению. Любого наблюдателя во время выполнения можно заменить другим наблюдателем или исключить его из списка - субьект этого не заметит.
- Добавление новых типов наблюдателей не требует модификации субьекта. Допустим, у нас появился новый класс, который должен стать наблюдателем. Вносить изменения в субьект не потребуеться - достаточно реализировать интрфейс Observer в новом классе и зарегестрировать его в качестве наблюдателя. Субьект будет доставлять оповещения любому обьекту, реализуещему интерфейс Observer.
- Субьекты и наблюдатели могут повторно использоваться независимо друг от друга. Между ними не существует сильных связей, что позволяет повторно использовать их для других целей.
- Изменения в субьекте или наблюдателе не влияют на другую сторону. Благодаря слабым связям мы можем вносить любые изменения на любой из двух сторон - при условии, что обьект реализует необходимиый интерфейс субьекта или наблюдателя.
- Слабосвязаные обьекты.
- Если два обьекта могут взаимодествовать, не обладая практически никакой информацие друг о друге, такие обьекты называються слабосвязанными.
WeatherData - также можна добавить метод setChanged - и оповесчать наблюдателей, только когда changed
- true.
Паттер Декоратор динамечески наделяет обьекты новыми возможностями и являеться гибкой альтернативой субклассированию в области расширения функцональности.
- Open/Closed
- Классы должны быть открыты для расширения, но закрыты для изменения.
Фабричный метод - определяет интерфейс создания обьекта, но позволяет субклассам выбрать класс создаваемого екземпляра. Таким образом, Фабричный метод делегирует операцию создания экземпляра субклассам.
Фабричный метод отвечает за создание обьектов и инкапсулирует эту операцию в субклассе. Таким образом клиентский код в суперклассе отделяеться от кода создания обьекта в субклассе.
Паттерн Абстрактная Фабрика предоставлет интерфейс создания семесйства взаимосвязанных или взаимосвязаных обьектов без указания их конкретных классов.
- Add UML from 188 page
- Add UML from 189 page
- Read page 190 - 193
- Complete example of AbstractFactory
- Watch https://www.youtube.com/watch?v=v-GiuMmsXj4&t=0s&list=PLrhzvIcii6GNjpARdnO4ueTUAVR9eMBpc&index=6
- add relation names for the UML;
- Add notice about Singleton pattern
- Last question from the 167 page
- Read from the proxy pattern