Когда я открыла книгу, то увидела вот эту потрясающую страницу и сначала просто на неё молча смотрела.
На самом деле всё не так страшно, как кажется. Это просто отношения паттернов. Но выглядит немного пугающе. :)
Заметки:
- Когда занимаешься проектированием, то не стоит ориентироваться только на реальный мир, потому что часто бывают классы, не имеющие аналогов в реальном мире. Например, массивы, алгоритмы и процессы.
- Сигнатура — имя метода, параметры и возвращаемое значение.
- Интерфейс объекта — множество сигнатур всех методов для объекта. В интерфейсе описываются все методы, которые можно использовать у объекта.
- У одного объекта может быть несколько интерфейсов. Один интерфейс может быть у нескольких разных объектов. Все взаимодействие с объектами осуществляется только через интерфейсы. Интерфейс объекта ничего не говорит про его реализацию. Вот такое я, кстати, постоянно использую и все связи обычно через интерфейсы идут.
- Динамическое связывание — ассоциирование запроса с объектом и одним из его методов во время выполнения. Такое связывание означает, что отправка метода не определяет никакой конкретной реализации до момента выполнения. Если совсем грубо говоря, то есть интерфейс Animal с методом voice() и класс Cat: Animal, где переопределен метод voice. И вот во фрагменте или где-либо еще мы вызываем метод voice, который находится именно в интерфейсе.
- Реализация объекта определяется его классом. Класс определяет данные и методы.
- Программируйте в соответствие с интерфейсом, а не с реализацией.
- Использование порождающих паттернов гарантирует, что все написано с абстракцией и с интерфейсами, а не через реализацию. Порождающие паттерны — фабричный метод, абстрактная фабрика, одиночка, прототип, строитель.