跳转至

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(f'红色的{shape.name}')

class Green(Color): def paint(self, shape): print(f'绿色的{shape.name}')

客户端

shape = Rectangle(Red()) shape.draw()

shape2 = Circle(Green()) shape2.draw()