工厂方法模式
来源:互联网 发布:windows界面开发库 编辑:程序博客网 时间:2024/05/20 14:20
在玩“极品飞车”游戏时,游戏者可以选择从不同的品牌来选择赛车,那么这个品牌其实也就是工厂,每个工厂生产的赛车都不一样。
UML图
Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
应用场景:由于需求的变化,一个类的子类经常面临着剧烈的变化,但他却拥有比较稳定的接口。使用一种封装机制来“隔离这种易变对象的变化”,工厂方法定义一个用于创建对象的接口,让子类来确定创建哪一个具体类的对象,将对象的实例化延迟。
应用场景:
1. 当一个类不知道它所创建的对象的类的时候;
2. 当一个类希望由它的子类来指定所创建的对象的时候;
和简单工厂模式类似,只是把工厂也抽象化了。简单工厂模式只有一个工厂,工厂方法对每一个产品都有相应的工厂。
好处:当增加一个产品时,只需要增加产品类和相对应的工厂,而不需要修改工厂类
1、工厂方法为共厂类定义了接口,用多态类削弱了工厂类的职能
public interface Factory { public void createProduct();}
2、首先为所有产品定义一个共同的产品接口:
public interface Product { abstract public void operation();}
3、让生产的所有产品都必须实现上面的接口
class Washer implements Product{ public void operation() { // TODO Auto-generated method stub System.out.println("制造洗衣机"); }}class Fridge implements Product{ public void operation() { // TODO Auto-generated method stub System.out.println("制造冰箱"); }}class AirConditioner implements Product{ public void operation() { // TODO Auto-generated method stub System.out.println("制造空调"); }}
4、工厂方法的核心部分,也就是具体创建产品对象的具体工厂类
//制造洗衣机的工厂class WasherFactory implements Factory{ public void createProduct() { //制造洗衣机的 Washer washer = new Washer(); washer.operation(); }}//制造冰箱的工厂class FridgeFactory implements Factory{ public void createProduct() { //制造冰箱 Fridge fridge = new Fridge(); fridge.operation(); }}//制造空调的工厂class AirConditionerFactory implements Factory{ public void createProduct() { //制造空调 AirConditioner airConditioner = new AirConditioner(); airConditioner.operation(); }
5、下单时通过不同的工厂生产不同的产品
public static void main(String[] args) { // TODO Auto-generated method stub WasherFactory washerFactory = new WasherFactory(); FridgeFactory fridgeFactory = new FridgeFactory();AirConditionerFactory airConditionerFactory = new AirConditionerFactory(); airConditionerFactory.createProduct(); washerFactory.createProduct(); washerFactory.createProduct(); fridgeFactory.createProduct(); airConditionerFactory.createProduct();}
工厂方法和简单工厂的主要区别:
简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出现了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口类,就能达到,不用修改已有的代码。
工厂方法也有局限的地方,那就是当面对的产品有复杂的等级结构的时候,例如,例如,工厂除了生产家电外产品还生产手机类产品,这样一来,家电和手机就是两大产品家族了,这两大家族下面包含了数量众多的产品,每个产品又有多个型号,这样就形成了一个复杂的产品树了,如果用工厂方法来设计这个产品家族系统,就必须为每个型号的产品创建一个对应的工厂类,当有数百种或者上千种的时候就必须要有对应的上百成千个工厂类,这就出现了类爆炸。
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- 【语法】STL容器适配器:队列,优先队列,堆,栈
- github渲染mathjax公式
- 操作linux终端的常用快捷键
- 前端安全栈
- 如果为空值
- 工厂方法模式
- java之构造内部类
- 互联网下半场,向左还是向右
- linux usb驱动详解
- 【luogu1330】封锁阳光大学(并查集)
- 量化进阶——如何运用量化捕捉涨停
- 支付宝处理对账单
- MSM8909android5.1.1启动流程
- 特殊的广播接收者