Mode pont
Aperçu
- Séparez les deux dimensions d'une chose pour qu'elle puisse changer indépendamment
Objet
- Abstraction
- Affiner l'abstraction (RefindAbstraction)
- Réalisateur
- Mise en œuvre concrète (ConcreteImplementor)
Scène applicable
- Lorsque les choses ont des performances en deux dimensions, et qu'il est possible de s'étendre dans chaque dimension
Exemple
from abc import ABCMeta, abstractmethod
class Shape(metaclass=ABCMeta):
def __init__(self, color):
self.color = color
@abstractmethod
def draw(self):
pass
class Color(metaclass=ABCMeta):
@abstractmethod
def paint(self, shape):
pass
class Rectangle(Shape):
name = "矩形"
def draw(self):
self.color.paint(self)
class Circular(Shape):
name = "圆"
def draw(self):
self.color.paint(self)
class Red(Color):
name = "红色"
def paint(self, shape):
print(f"{Red.name}的{shape.name}")
class Blue(Color):
name = "蓝色"
def paint(self, shape):
print(f"{Blue.name}的{shape.name}")
rectangle = Rectangle(Red())
rectangle.draw()
avantage
- Séparation de l'abstraction et de la réalisation
- Excellente évolutivité