- 内容:将一个事物的两个维度分离,使其都可以独立变化
- 角色:
- 抽象(Abstraction)
- 细化抽象(RefinedAbstraction)
- 实现者(Implementor)
- 具体实现者(ConcreteImplementor)
- UML图
- 举个例子
需求:要求绘制一个图像,图形和颜色相互分离,并且可以相互组合
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 Retangle(Shape):
name = "长方形"
def draw(self):
# 长方形逻辑
self.color.paint(self)
class Circle(Shape):
name = "圆形"
def draw(self):
# 圆形逻辑
self.color.paint(self)
class Red(Color):
def paint(self, shape):
print("红色的%s" % shape.name)
class Green(Color):
def paint(self, shape):
print("绿色的%s" % shape.name)
shape = Retangle(Red())
shape.draw()
shape2 = Circle(Green())
shape2.draw()
输出结果
红色的长方形
绿色的圆形
- 应用场景: 当事物有两个维度上的表示,两个维度都可能扩展时。
- 优点:
- 抽象与实现分离
- 优秀的扩展能力