Операторы switch
Симптомы и признаки
У вас есть сложный оператор switch
или последовательность if
-ов.
Причины появления
Одним из очевидных признаков объектно-ориентированного кода служит сравнительно редкое использование операторов типа switch
или case
. Часто один и тот же блок switch
оказывается разбросанным по разным местам программы. При добавлении в него нового варианта приходится искать все эти блоки switch
и модифицировать их.
Как правило, заметив блок switch
, следует подумать о полиморфизме.
Лечение
-
Чтобы изолировать
switch
и поместить его в нужный класс может понадобиться извлечение метода и перемещение метода. -
Если
switch
переключается по коду типа, например, переключается режим выполнения программы, то следует использовать замену кодирования типа подклассами или замену кодирования типа состоянием/стратегией. -
После настройки структуры наследования следует использовать замену условного оператора полиморфизмом.
-
Если вариантов в операторе не очень много и все они приводят к вызову одного и того же метода с разными параметрами, введение полиморфизма будет избыточным. В этом случае стоит задуматься о разбиении этого метода на несколько разных, которые будут выполнять каждый свои функции, для чего нужно применить замену параметра набором специализированных методов.
-
Если одним из вариантов условного оператора является
null
, используйте введение Null-объекта.
Выигрыш
- Улучшает организацию кода.
Не стоит трогать, если...
-
Когда оператор
switch
выполняет простые действия, нет никакого смысла что-то менять в коде. -
Зачастую оператор
switch
используется в фабричных паттернах проектирования (Фабричный метод, Абстрактная фабрика) для выбора создаваемого класса.