简单工厂
2020-07-22 本文已影响0人
厚积方能薄发
一、请你说一下,什么是简单工厂
这个设计模式主要是用来创建对象实例的,他的核心思想是“封装隔离”,本质是“选择实现”。
二、具体说一下“封装隔离”
举个例子:
在面向对象语言中经常会用到接口,接口将外部调用和内部实现分开了,只要接口不变,内部实现的变化就不会影响到外部的应用,从而使得系统更灵活,具有更好的扩展性和可维护性。接口的思想就是“封装隔离”。
简单工厂中的封装是指被隔离体行为的封装。
具体来说就是不接触具体的实现类,通过工厂来创建指定对象。 具体实现变化后也不用变动客户端了。
三、选择实现
上层不用自己创建对象,选择一个类型,由工厂来创建具体对象。比如:我要一个三角形,我要一个正方形。
四、这个设计模式有什么优劣呢
优点
- 松散耦合
- 下层变动不影响上层
缺点
- 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响。
- 违背“开闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
五、什么情况下应该用这种模式
- 松散耦合,降低客户端对子系统依赖时。
- 职责集中管控:
- 举个例子:比如更新皮肤的时候,要重新创建大量的对象,这个时候选用简单工厂。
- Flutter 有一个插件叫 FlutterJsonBeanFactory,是用来根据接口返回 json 数据创建 model 的,由于 Dart 没有反射机制,这种情况非常适合用简单工厂来实现。
六、开发中有用到简单工厂吗
JDK 源码中的 Calendar 类:
根据不同的地区来创建不同的日历对象,就好比日历这个工厂,生产着世界上各地区的日历,我需要这个地区日历,我只需要传参数告诉工厂即可,不需要知道日历制作过程和实例的过程。
该示例既需要创建一批对象,又需要对职责进行集中管控,所以选用简单工厂。