工厂模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
意图
- 定义一个接口来创建对象,但是工厂本身并不负责创建对象,而是将这一任务交给子类来完成,即子类决定了实例化那些类
- Factory方法的创建是通过继承而不是通过实例化来完成的
- 工程方法使设计更具有可定制性。它可以返回相同的实例或子类,而不是某种类型的对象
优点
1、具有更大的灵活性,使代码更加透明通用
2、松耦合的:创建对象的代码与使用它的代码是分开的,客户端完全不需要关心传递哪些参数和实例化哪些类。
3、创建新类更容易,降低了维护的成本
实现
1.简单工厂
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。
from abc import ABC, abstractmethod
# 手机
class Phone(ABC):
@abstractmethod
def product(self):
pass
# 苹果手机
class Apple(Phone):
def product(self):
print("product apple")
# 小米手机
class XiaoMi(Phone):
def product(self):
print("product xiaomi")
class Factory:
def product_phone(self, mobile_type):
if mobile_type == 'apple':
return Apple()
else:
return XiaoMi()
if __name__ == '__main__':
factory = Factory()
factory.product_phone('apple').product()
factory.product_phone('xiaomi').product()
简单工厂模式适用于需创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂的情况下,而且用户只关心那种类型的实例被创建,并不关心其初始化过程时,比如多种数据库(MySQL/MongoDB)的实例,多种格式文件的解析器(XML/JSON)等。但是一旦我们需要生产更多的产品,那我们就不得不去修改Factory。这样的话就违反了设计模式的“开放/封闭原则“
2.工厂方法模式
工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END