工厂方法模式(FACTORY METHOD)是一种常用创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类, 通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
''' 矿泉水生产 矿泉水有:农夫水、娃哈哈水、怡宝水 这块是变化的部分,不变的是水 水是稳定的 所以提取出来做抽象类 ''' import abc import datetime class AbsShui(abc.ABC): def __init__(self): '生产日期' self.datatiem = datetime.datetime.now() @abc.abstractmethod def say(self): pass '娃哈哈水' class WaHaHaShui(AbsShui): def say(self): return "hi~我叫娃哈哈 %s" % self.datatiem '农夫水' class NongFuShui(AbsShui): def say(self): return "hi~我叫小农 %s" % self.datatiem '工厂类' class ShuiFactory(abc.ABC): @abc.abstractmethod def __call__(self): pass class WaHaHaFactory(ShuiFactory): def __call__(self): return WaHaHaShui() class NongFuShuiFactory(ShuiFactory): def __call__(self): return NongFuShui() '专卖店' class ZhuanMaiDian: def __init__(self, factory: ShuiFactory): self.shui = factory # 多态 解耦 def chu_shou(self): o = self.shui() # 生产水 print(o.say()) '哇哈哈专卖店' whh = ZhuanMaiDian(WaHaHaFactory()) ''' 生产水 ''' whh.chu_shou() whh.chu_shou() whh.chu_shou() '农夫专卖店' hf = ZhuanMaiDian(NongFuShuiFactory()) hf.chu_shou()