创建型模式之工厂模式

工厂模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

意图

  • 定义一个接口来创建对象,但是工厂本身并不负责创建对象,而是将这一任务交给子类来完成,即子类决定了实例化那些类
  • 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
喜欢就支持一下吧
点赞0 分享