工厂模式
来源:互联网 发布:信天翁 爱情 知乎 编辑:程序博客网 时间:2024/06/08 02:33
设计模式原则之中有一点是不应该针对实现编程,但是每次new的时候实际就是针对实现编程。
针对实现编程会带来很多问题,会使代码更脆弱,缺乏弹性。如
Person p;if(sex="男人") p=new Man();else p=new Woman();
如果改天我们想再加一个小孩呢?这就需要对这段代码重新修改。这样的修改很容易犯错,造成系统的局部更新维护。好的代码都是对扩展开发对修改关闭
但是该代码并没有“修改关闭”
这样我们该如何解决呢?设计原则中有一条是“找出变化的方面,把它们从不变的部分分离出来”。于是引入了工厂模式
工厂模式实际上算不算一种设计模式,反而更像一种编程习惯,将该重复的代码提出来来进行统一的管理。
Pizza orderPizza(String type){Pizza pizza;if(type.equals("Cheese")) pizza=new CheesePizza();else if(type.equals("Greek")) pizza=new GreekPizza();pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}
从这个代码中我们可以看出,每个pizza的创建都要根据type来决定,如果有一天我们要新增一个口味的pizza。
这样如果只有一个pizza店的话,还好办,就在该pizza店的orderPizza方法中修改该if判断来新增。但是如果有很多pizza店的话,就会疯狂,每个pizza店类都要对orderPizza方法进行修改。
如果我们将这部分判出创建Pizza类的方法提出来,变为一个类,每个pizza店都引用该类来创建pizza。每个pizza店只需要知道使用该类能得到Pizza,不需要知道细节,这样可以实现解耦
代码变为:
Pizza orderPizza(String type){Pizza pizza;该代码提出封装!pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}public class SimplePizzaFactory{ public Pizza createPizza(String type){ if(type.equals("Cheese")) pizza=new CheesePizza(); else if(type.equals("Greek")) pizza=new GreekPizza(); }}
下面就是我们的PizzaStore类了
public class PizzaStore{ SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory){ this.factory=factory; }public Pizza orderPizza(String type){ Pizza pizza; pizza=factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }}
这样便实现了工厂模式,将创建的代码包装为一个类,当以后实现改变时,只需要修改这个类即可。这样的最大好处就是所有关于该类的创建都封装提出,这样如果创建改变,只需要改变该工厂类即可,而不需要所有的创建部分都更改。
这个只是最简单的工厂模式,下面还有两个最主要的工厂类模式:工厂方法和抽象工厂模式。
1 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 分布式学习
- JS原型题集
- HDU 1827 3072强联通分量
- HDU 5761 Rower Bo (数学题,积分)
- 欢迎使用CSDN-markdown编辑器
- 工厂模式
- ZOJ - 1649 Rescue
- LeetCode总结
- 人生经验 我想在大学中学一门技术,我该怎么办?
- Java操作Excel导出数据到Excel文档
- 最普通的java for循环
- Linux页表初始化
- JAVA7新特性:数字下划线分隔符
- linux shell数据重定向(输入重定向与输出重定向)详细分析