1 概述
将一个事物的两个维度分离,使其可以独立地变化
一个图形的形状和一个图形的颜色,形状和颜色是两个不同的维度
角色
- 抽象
- 细化抽象
- 实现者
- 具体实现者
使用场景
- 抽象和实现相分离
- 优秀的扩展能力
2 代码实现
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 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)
shape1 = Rectangle(Red())
shape1.draw()
shape2 = Circle(Green())
shape2.draw()
"""
OUT:
红色的长方形
绿色的圆形
"""