测试必认识的设计模式之简单工厂模式

这里写的更详细,术语描述的更准确:
https://blog.csdn.net/qq_27825451/article/details/84235974

这里是个人粗浅的理解加上一些比喻!

第一次看到工厂模式时硬是没有理解,导致往后看到它都绕着走,但无意间看到了别人写的代码,突然恍然大悟,工厂模式并不复杂,也是一套模板!~~

它究竟是解决什么问题的呢?(个人有限的看法)

某一大类中有很多很多类,如大类food里有苹果,梨,香蕉等等类,如果这个版本只要求上苹果,创建对象时就可以用new来写,但如果下个版本又要添加梨,香蕉,再下个版本又要添加橘子,榴莲等等,难道要一直new吗?到最后也不知道经过多少开发之手了,代码完全乱套,这种情况就可以用工厂模式统一管理,统一分配!

注意工厂模式是用来创建对象的!

一共三种工厂模式,依次是:简单工厂模式 >>> 工厂方法(函数)模式 >>> 抽象工厂模式

先看简单工厂模式。

还是以food为例。

正常情况下,我们只需要一个水果时,只要new

class apple:
    def __init__(self):
        print('苹果')

ap = apple()

结果:
苹果

但如果水果多的话就要换种思考方法了。

#### 水果种类

class Pea:
    def __init__(self):
        print('Pea')


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


class Celery:
    def __init__(self):
        print('Celery')

#### 食物工厂
class FoodFactory:

    def create_factory(self, name):
        if name == 'Pea':
            return Pea()
        elif name == 'Kale':
            return Kale()
        elif name == 'Celery':
            return Celery()
        else:
            return None

先从水果种类开始看,首先是定义了水果类,有Pea,Kale,Celery,我觉得这些就相当于工厂里的机器,可以加工特定的水果。

FoodFactory就相当于大型厂房,里面装有上面的机器,给厂房发布命令,具体的机器开始运作加工水果。

if __name__ == '__main__':
    pea = FoodFactory().create_factory('Pea')
    Kale = FoodFactory().create_factory("Kale")
    Celery = FoodFactory().create_factory("Celery")

你看我们在创建水果类时是用工厂类创建的,不是直接new出来的,这还有一个好处是隐藏“创建逻辑”。

创建逻辑是什么鬼?

简单理解就是指我必须要知道创建函数的构造函数的逻辑组成,才能创建对象。

总结如果要创建一系列复杂的对象,需要提供很多的创建信息;或者是我想要隐藏创建对象时候的“代码逻辑”,就需要使用“工厂模式”

但是呢,大佬们写代码追求优秀,要遵守开闭原则,就是对扩展开放,对修改关闭,就是新增代码可以有,但修改以前的代码坚决不要。

(我刚开始理解时认为新增和修改不是一回事吗,到后来才明白,新增是在不修改原有代码的基础上新增代码,修改的意思是修改以前写好的代码,注意这2个地方是有前提的——有已经写好的一部分代码)

简单工厂模式就违背了开闭原则,试想,当要求再新增一个水果时,必要要修改工厂类中的if语句,这就不是优秀代码了。

所以,有大佬就对着屏幕思考啊思考,终于思考出简单工厂模式的升级版 工厂方法(函数)模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值