複雜的條件邏輯很難理解,一種改善法是拆解成不同環境,用類別與多型會讓這種分解更明確。

Replace Conditional with Polymorphism

classDiagram
    direction TB
    class Vehicle {
        <<abstract>>
        +get_speed()
    }
    class Car {
        +get_speed() 100
    }
    class Bicycle {
        +get_speed() 20
    }
    class Boat {
        +get_speed() 30
    }

    Vehicle <|-- Car
    Vehicle <|-- Bicycle
    Vehicle <|-- Boat

    note for Vehicle "取代 if/switch 判斷<br/>每個子類別實作自己的邏輯"
# Before
class Vehicle:
    def __init__(self, vehicle_type):
        self.vehicle_type = vehicle_type

    def get_speed(self):
        if self.vehicle_type == "car":
            return 100
        elif self.vehicle_type == "bicycle":
            return 20
        elif self.vehicle_type == "boat":
            return 30
        else:
            return 0

# After
class Vehicle:
    def get_speed(self):
        return 0

class Car(Vehicle):
    def get_speed(self):
        return 100

class Bicycle(Vehicle):
    def get_speed(self):
        return 20

class Boat(Vehicle):
    def get_speed(self):
        return 30

car = Car()
print(f"Car speed: {car.get_speed()}")