Bridge는 '다리'의 의미를 가지고 있다.
현실에서 두 개의 장소를 서로 연결하는 역할을 하듯이 Bridge Pattern도 두 장소를 연결하는 역할을 한다.
이 패턴은 추상화(Abstraction)와 구현(Implementaion)을 분리한다.
추상화는 인터페이스로 정의되며, 구현은 추상화로부터 분리된다.
class Animal:
def speak(self):
pass
class Cat(Animal):
def speak(self):
print("a cat", end="")
class Dog(Animal):
def speak(self):
print("a dog", end="")
class Vehicle:
def __init__(self, animal:Animal):
self.animal = animal
def start(self):
pass
class Car(Vehicle):
def start(self):
self.animal.speak()
print("drives a car")
class Boat(Vehicle):
def start(self):
self.animal.speak()
print("sails a boat")
class Airplane(Vehicle):
def start(self):
self.animal.speak()
cat = Cat()
boat = Boat(cat)
boat.start() # a cat sails a boat
dog = Dog()
car = Car(dog)
car.start() # a dog drives a car
- Bridge Pattern은 기능의 클래스 계층과 구현의 클래스 계층을 분리하는 것
- 이 두개의 클래스 계층을 분리해 두면 각각의 클래스 계층을 독립적으로 확장 가능
- 기능을 추가하고 싶으면 기능 클래스 계층에 추가,
이때 구현 클래스 계층은 수정할 필요 x- 새로 추가한 기능은 모든 구현에 대해 이용 가능