浅说工厂相关的几个模式
来源:互联网 发布:rng sky 知乎 编辑:程序博客网 时间:2024/05/21 07:55
常听与工厂相关的几个模式,简单工厂,工厂方法,抽象工厂,他们的区别,关系,使用场景是什么?
1.假设有一个父类,子类1,子类2,子类3(或者有一段代码,if else分支中逻辑比较复杂,分支可以抽成一个单独的类,那么抽成父类,子类1,子类2.。。)
这三个子类可以根据某个条件的不同决定使用哪个类,这时候就可以用简单工厂,将对象的创建交由工厂去做,如:
public class XXXFactory{public static 父类 getXXX(param){if(){return new 子类1;}else if(){return new 子类2;}...}}这个时候我们只需要指定一个参数,就可以由工厂创建一个自己需要的类的对象,缺陷是什么呢?如果子类增加了,就需要修改工厂方法的分支部分代码。按照开放-封闭的原则,这不是好的方法。
2.有问题,怎么改进呢?就是工厂方法模式。
问题在于getXXX方法,那就将其变成可扩展。将每一个if else 变成一个类,并未这些类抽出一个接口IFactory。那么:
public Factory1 implements IFactory{public 父类 getXXX(){return new 子类1;}}同理工厂2对应子类2,这样就解决了增加子类无需修改代码,只需要增加一个工厂类就可以了。有缺陷么?有。通常情况可能还需要父类2,父类3,也是可能的。总不能再搞几个同样的IFactory2,IFactory3,这就弱爆了。
3.改进方法,将弱爆了的IFactory1,IFactory2,IFactory3合并到一个接口IFactory中,只是包含了3个方法,分别解决父类1,父类2,父类2的方法。也即抽象工厂模式。不过此模式未做深入了解,不言好还是不好。
4.此时若增加一个子类4(注意不是父类了哈),带来的后果是什么,就是工厂自上至下都要增加一个方法,这如何解决?
5.回归简单工厂,去掉所有的IFactory及其子类,用一个简单工厂类+多个创建方法+每个方法内switch来取代。这不又回去了么?到底要闹哪样?所以没有绝对的好与坏,只能根据业务场景决定自己的取舍。
6.再高级一点,就是spring的DI,需要哪些类放在配置文件中指定,增加新类是只是换一个字符串,然后利用反射根据类名生成新的类。
0 0
- 浅说工厂相关的几个模式
- 浅说css的几个选择器
- 2. 有关工厂的几个模式(二) 抽象工厂
- 工厂相关模式
- 工厂模式相关
- 工厂相关模式
- 工厂模式相关
- 设计模式的应用场景(2)--工厂相关模式
- 实现php工厂模式的几个关键函数
- 几个工厂模式和门面模式
- 设计相关3-工厂相关模式
- 浅说C++的指针
- 设计模式中几个工厂模式的比较——餐馆的故事
- 抽象工厂模式、简单工厂模式、工厂模式的区别
- 简单工厂模式、工厂模式、抽象工厂模式的区别
- Java的几个概念AOP、IOC、DI、DIP、工厂模式、IOC容器
- 回顾工厂模式学习相关要点
- iOS设计模式:静态工厂相关
- 再看一下《Clash of Clans》(部落冲突)成绩和一点分析
- Swing更改外观
- Activity的4种加载模式
- 鸿宝术高端研修班天机班
- Linux文件和目录管理
- 浅说工厂相关的几个模式
- 小数学解决大问题 - 分类器组合方法(由民主投票想到)
- C# web DataTable 导出成Excel
- 鸿宝术的宗旨就是道义
- 构造方法中不应调用可被覆盖的方法
- 《UNIX环境高级编程》笔记--XSI IPC
- linux 下安装memcached
- WebSocket协议
- 中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030