python 工厂方法

工厂方法模式(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()

 

你可能感兴趣的:(python 工厂方法)