Оператори switch
Симптоми і ознаки
У вас є складний оператор switch
або послідовність if
-ів.

Причини появи
Однією з очевидних ознак об’єктно-орієнтованого коду служить порівняно рідкісне використання операторів типу switch
або case
. Часто один і той же блок switch
виявляється розкиданим по різних місцях програми. При додаванні в нього нового варіанту доводиться шукати всі ці блоки switch
і модифікувати їх.
Як правило, помітивши блок switch
, слід подумати про поліморфізм.
Лікування
-
Щоб ізолювати
switch
і помістити його в потрібний клас може знадобитися відокремлення методу і переміщення методу. -
Якщо
switch
перемикається за допомогою коду типу, наприклад, перемикається режим виконання програми, то слід використати заміну кодування типу підкласами або заміну кодування типу станом/стратегією. -
Після налаштування структури наслідування слід використати заміну умовного оператора поліморфізмом.
-
Якщо варіантів в операторі не дуже багато і всі вони призводять до виклику одного й того ж методу з різними параметрами, то введення поліморфізму буде надмірним. В цьому випадку варто замислитися про розбиття цього методу на декілька різних, які виконуватимуть кожен свої функції, для чого треба застосувати заміну параметра набором спеціалізованих методів.
-
Якщо одним з варіантів умовного оператора є
null
, використайте введення Null-об’єкта.
Виграш
- Покращує організацію коду.

Не варто чіпати, якщо...
-
Коли оператор
switch
виконує прості дії, немає ніякого сенсу щось міняти в коді. -
Часто буває, що оператор
switch
використовується у фабричних патернах проектування (Фабричний метод, Абстрактна фабрика), для вибору створюваного класу.