「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
工厂模式主要有三种,先介绍一下简单工厂模式,顾名思义比较简单
含义: 利用单独的类来进行创造实例的过程,定义⼀个创建对象的接⼝,让接⼝的实现类决定创建哪种对象,让类的实例化推迟到⼦类中进行。
就像工厂一样,在工厂先建好机器,然后等待一系列物品进行生产,就拿咖啡举例吧
1 | typescript复制代码//首先创建一个咖啡的规范类 |
接下来了解一下他的优缺点吧,优点显而易见,当想要创建对象时候,仅仅知道它的名称就可以了,并且屏蔽具体的实现过程,很好的体现了封装性;但是现在如果有很多种类咖啡的话,那么就要在工厂中增加大量的条件判断,不符合开闭原则,会使工厂类变得非常繁琐,也不符合单一职责原则,这就是它的缺点。
为了应对简单工厂模式的缺点,我们可以把生产各个产品的工厂也做抽象分离,即每个产品都有自己专门的工厂,顾名思义它叫工厂方法模式
1 | typescript复制代码//首先创建一个咖啡工厂的规范类 |
这样一来,当我们想要新的种类的时候,只需要新建工厂就行了,同时能够满足开闭原则和单一职责原则。但是它虽然进一步优化了简单工厂模式,可它仍然需要创建大量的类,增加函数的复杂度。
可以看出上述两种模式都是对同一种类的物品进行生产的工厂,那么我们要生产汽车,衣服怎么办呢?总不能还用咖啡的工厂来生产吧。就算像奶茶一样有相似之处,复制修改相同的代码虽然也是可以,但是如果后期维护和扩展功能你就知道这种做法是多么愚蠢了。因此就发明出了随时改变的抽象工厂模式。
1 | scala复制代码//首先创建抽象工厂 |
虽然完善了简单工厂模式和工厂方法模式不方便扩展产品族,并且增加了系统的抽象性和理解难度。
虽然看起来这三种工厂模式越来越好,但是并没有所谓的高级模式,只有适合使用的场景才是最好的,大家应该按照自己的需求找到最合适的模式。
本文转载自: 掘金