Класи повинні бути відкриті для розширення, але закриті для модифікації.
S – Single Responsibility (Принцип єдиної відповідальності)
Кожен клас повинен відповідати тільки за одну операцію.
Шаблонний метод
Аналогія
Допустимо, ви зібралися будувати будинки. Етапи будуть такими:
- Підготовка фундаменту.
- Зведення стін.
- Настил даху.
- Настил перекриттів.
Порядок етапів ніколи не змінюється. Ви не настеліть дах до зведення стін – і т. д. Але кожен етап модифікується: стіни, наприклад, можна звести з дерева, цегли або газобетону.
Стан
Аналогія
Припустимо, у графічному редакторі ви вибрали інструмент «Пензель». Вона змінює свою поведінку залежно від налаштування кольору: тобто малює лінію вибраного кольору.
Стратегія (Strategy)
Аналогія
Візьмемо приклад із пухирцевим сортуванням. Ми її реалізували, але зі зростанням обсягів даних сортування почало виконуватися дуже повільно. Тоді ми зробили швидке сортування (Quick sort). Алгоритм працює швидше на великих обсягах, але на маленьких він дуже повільний. Тоді ми реалізували стратегію, за якої для невеликих обсягів даних використовується бульбашкове сортування, а для великих – швидке.
Відвідувач
Аналогія
Туристи зібралися до Дубаї. Спочатку їм потрібен спосіб потрапити туди (віза). Після прибуття вони відвідуватимуть будь-яку частину міста, не питаючи дозволу, ходити де заманеться. Просто скажіть їм про якесь місце — і туристи можуть там побувати. Шаблон відвідувачів допомагає додавати місця для відвідування.
Спостерігач (Behavior)
Аналогія
Хороший приклад: люди, які шукають роботу, підписуються на публікації на сайтах вакансій та отримують повідомлення, коли з’являються вакансії, які підходять за параметрами.
Хранитель
Аналогія
Як приклад можна навести калькулятор (“творець”), у якого будь-яка остання виконана операція зберігається в пам’яті (“хранитель”), щоб ви могли знову викликати її за допомогою якихось кнопок (“опікун”).
Посередник
Аналогія
Коли ви розмовляєте з кимось по мобільному, то між вами та співрозмовником знаходиться мобільний оператор. Тобто сигнал передається через нього, а не безпосередньо. У цьому прикладі оператор — посередник.