工厂方法模式
概述
- 定义一个用于创建对象的接口,让子类决定实例化哪一个产品类
角色
- 抽象工厂角色(Creator)
- 具体工厂角色(Concrete Creator)
- 抽象产品角色(Product)
- 具体产品角色(Concrete Product)
例子
from abc import ABCMeta,abstractmethod
class Animal(metaclass=ABCMeta):
@abstractmethod
def walk(self):
pass
class Rabbit(Animal):
def walk(self):
print("兔子行走")
class Duck(Animal):
def walk(self):
print("鸭子行走")
class AnimalFactory(metaclass=ABCMeta):
@abstractmethod
def create_animal(self):
pass
class RabbitFactory(AnimalFactory):
def create_animal(self):
return Rabbit()
class DuckFactory(AnimalFactory):
def create_animal(self):
return Duck()
优点
- 每个具体产品都对应一个具体工厂类, 不需要修改工厂类代码
- 隐藏了对象创建实现细节
缺点
- 每增加一个具体产品类,就必须增加一个相应的具体工厂类