(НЕ ЗАКОНЫ)
-
Изменяемые аспекты приложения должны быть отделенны от постоянных;
-
Программировать на уровне интерфейсов, а не на уровне реализаций;
-
Композиция* лучше наследования;
-
Стремиться к слабой связанности* взаимодействующих объектов;
- Выделять уровень абстракции, чтобы работать с супер типом (Полиморфизм)
-
Используйте только одну точку.
(Class.method())
Принцип минимальной информированности;
-
У класса должна быть только 1 обязанность. Только 1 причина для изменения. Single Responsibility S_olid;
-
Классы открыты для расширения, но закрыты для изменения. Open/closed s_O_lid;
-
Наследующий класс должен дополнять, а не замещать поведение базового класса. Liskov Substitution so_L_id;
-
Клиенты не должны зависеть от методов, которые они не используют. Interface Segregation sol_I_d;
-
Инверсия управления (Голливудский принцип) ->>> Dependency-Inversion soli_D;
Порождающие: удобное и безопасное создание новых объектов | Структурные: построение удобных в поддержке иерархий классов | Поведенческие: эффективного и безопасного взаимодействия между объектами программы |
---|---|---|
Фабричный метод | Адаптер | Цепочка обязанностей |
Абстрактная фабрика | Мост | Команда |
Строитель | Компоновщик | Итератор |
Пул объектов | Декоратор | Посредник |
Прототип | Фасад | Снимок |
Одиночка | Легковес | Наблюдатель |
Заместитель | Состояние | |
Выделение частного класса данных | Стратегия | |
Шаблонный метод | ||
Посетитель | ||
Null объект |