抽象工厂设计模式实例
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def draw(self):
pass
class Circle(Shape):
def draw(self):
print("Drawing Circle")
class Square(Shape):
def draw(self):
print("Drawing Square")
class Color(ABC):
@abstractmethod
def fill(self):
pass
class Red(Color):
def fill(self):
print("Filling Red")
class Green(Color):
def fill(self):
print("Filling Green")
class AbstractFactory(ABC):
@abstractmethod
def get_shape(self, shape):
pass
@abstractmethod
def get_color(self, color):
pass
class ShapeFactory(AbstractFactory):
def get_shape(self, shape):
if shape == "CIRCLE":
return Circle()
elif shape == "SQUARE":
return Square()
return None
def get_color(self, color):
return None
class ColorFactory(AbstractFactory):
def get_shape(self, shape):
return None
def get_color(self, color):
if color == "RED":
return Red()
elif color == "GREEN":
return Green()
return None
class FactoryProducer:
@staticmethod
def get_factory(choice):
if choice == "SHAPE":
return ShapeFactory()
elif choice == "COLOR":
return ColorFactory()
return None
if __name__ == "__main__":
shape_factory = FactoryProducer.get_factory("SHAPE")
shape1 = shape_factory.get_shape("CIRCLE")
shape1.draw()
shape2 = shape_factory.get_shape("SQUARE")
shape2.draw()
color_factory = FactoryProducer.get_factory("COLOR")
color1 = color_factory.get_color("RED")
color1.fill()
color2 = color_factory.get_color("GREEN")
color2.fill()