测试必认识的设计模式之工厂方法(函数)模式

专业版:
https://blog.csdn.net/qq_27825451/article/details/84246759

非专业版:
想要看懂这篇文章,得先看上一篇,因为用的比喻是类似的
https://blog.csdn.net/wangsais54977/article/details/105573894

工厂方法(函数)模式应用的场景和简单工厂模式是一致的,只是工厂方法模式更符合开闭原则了。

如果说简单工厂模式是一家小工厂的话,那工厂方法模式就可以理解为一个工业园区,工业园区中有很多企业,每个企业只生产自己的产品,但工业园区中的每个企业必须要遵守园区的规则(这是核心),工业园区就想简单工厂模式中的food,企业就像简单工厂模式中的水果。

来看代码

# 企业
class Pea:
    def create_fruit(self):
        print('Pea')


class Kale:
    def create_fruit(self):
        print('Kale')


class Celery:

    def create_fruit(self):
        print('Celery')


# 园区规则
class FoodFactory:
    def create_fruit(self):
        pass


# Kale企业
class KaleFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Kale':
            return Kale()


# Pea企业
class PeaFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Pea':
            return Pea()


# Celery企业
class CeleryFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Celery':
            return Celery()


if __name__ == '__main__':
    kale = KaleFactory().create_fruit('Kale').create_fruit()
    Pea = PeaFactory().create_fruit('Pea').create_fruit()
    Celery = CeleryFactory().create_fruit('Celery').create_fruit()
    
结果
Kale
Pea
Celery

工厂方法模式将原来的if语句拆分成类,每个if支路变成一个具体的工厂类,每个具体的工厂类继承统一的工厂类(这个不就相当于园区的规则吗)。

这就解决了修改代码的问题,你想想,如果要新增一个企业,我们只要新增一个企业类和一个企业工厂类就完事了,不用修改以前的代码。

看新增一个apple类的例子:

# 企业
class Pea:
    def create_fruit(self):
        print('Pea')


class Kale:
    def create_fruit(self):
        print('Kale')


class Celery:

    def create_fruit(self):
        print('Celery')
        
# 新苹果类
class Apple:

    def create_fruit(self):
        print('Apple')

# 园区规则
class FoodFactory:
    def create_fruit(self):
        pass


# Kale企业
class KaleFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Kale':
            return Kale()


# Pea企业
class PeaFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Pea':
            return Pea()


# Celery企业
class CeleryFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Celery':
            return Celery()
            
            
# 新苹果企业
class AppleFactory(FoodFactory):
    def create_fruit(self, name):
        if name == 'Apple':
            return Apple()

但是,还是有问题,如果类很多很多的话,要新建很多很多的水果类和水果企业类,也太麻烦了,因此大佬又出现了。

某天晚上,大佬看着满屏的代码,思考我能不能再把它升级下,让它再次进化,想了一夜也没想到如何实现。

早晨,蹲坑正用力时,突然一道灵光如开天辟地时第一道真理之光一样照进大佬的脑中,他马上提上裤子,跑到电脑旁开始撸码!

抽象工厂模式就此诞生!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值