Модулі верхнього рівня повинні залежати від модулів нижнього рівня. І ті, й інші мають залежати від абстракцій. Абстракції не повинні залежати від деталей. Деталі мають залежати від абстракцій.
Калина Сергій
I – Interface Segregation (Принцип поділу інтерфейсів)
Не слід ставити клієнт у залежність від методів, які не використовує.
L – Liskov Substitution (Принцип підстановки Барбари Лісков)
Якщо П є підтипом Т, будь-які об’єкти типу Т, присутні у програмі, можуть замінюватися об’єктами типу П без негативних наслідків для функціональності програми.
O – Open-Closed (Принцип відкритості-закритості)
Класи повинні бути відкриті для розширення, але закриті для модифікації.
S – Single Responsibility (Принцип єдиної відповідальності)
Кожен клас повинен відповідати тільки за одну операцію.
Шаблонний метод
Аналогія
Допустимо, ви зібралися будувати будинки. Етапи будуть такими:
- Підготовка фундаменту.
- Зведення стін.
- Настил даху.
- Настил перекриттів.
Порядок етапів ніколи не змінюється. Ви не настеліть дах до зведення стін – і т. д. Але кожен етап модифікується: стіни, наприклад, можна звести з дерева, цегли або газобетону.
Стратегія (Strategy)
Аналогія
Візьмемо приклад із пухирцевим сортуванням. Ми її реалізували, але зі зростанням обсягів даних сортування почало виконуватися дуже повільно. Тоді ми зробили швидке сортування (Quick sort). Алгоритм працює швидше на великих обсягах, але на маленьких він дуже повільний. Тоді ми реалізували стратегію, за якої для невеликих обсягів даних використовується бульбашкове сортування, а для великих – швидке.
Відвідувач
Аналогія
Туристи зібралися до Дубаї. Спочатку їм потрібен спосіб потрапити туди (віза). Після прибуття вони відвідуватимуть будь-яку частину міста, не питаючи дозволу, ходити де заманеться. Просто скажіть їм про якесь місце — і туристи можуть там побувати. Шаблон відвідувачів допомагає додавати місця для відвідування.