设计模式之——工厂方法设计模式
来源:互联网 发布:怎样领取淘宝优惠券 编辑:程序博客网 时间:2024/06/06 15:37
这个也属于工厂设计模式的一种,上篇设计模式文章我说过,简单工厂设计模式代码有股味道。问题在哪呢???我们发现如果扩展运算的话,首先要创建一个对应的操作类,然后在工厂中加一层判断,那么我们添加功能的时候就违背了“开放-封闭原则”了,因为每次扩展功能都要连珠修改大量代码,耦合度太高了。
今天就介绍一个他的升级版设计模式,算是比较好的方式了—— 工厂方法设计模式。最大优点就是减少了必要的逻辑判断。
原理是将创建操作的过程抽象化,有什么操作实现这个接口,可以很好地扩展。工厂方法模式实现时,实际上是将工厂内部的逻辑判断迁移到了客户端,客户端需要决定哪一个工厂来实现运算类,这也是这一种设计模式暴露出的不好的味道。
下面来撸代码:
抽象产品类:用于定义产品都有哪些属性和操作
package com.zndroid.dm.FactoryModel.MethodFactory.opration;/** * Created by luzhenyu on 2016/8/15. */public abstract class Operation { protected double numA; protected double numB; public void setNumA(double numA) { this.numA = numA; } public void setNumB(double numB) { this.numB = numB; } public abstract double getResult();}具体产品类:具体实现属性和操作
package com.zndroid.dm.FactoryModel.MethodFactory.opration.impl;import com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation;/** * Created by luzhenyu on 2016/8/20. */public class AddOpration extends Operation { @Override public double getResult() { return numA + numB; }}
package com.zndroid.dm.FactoryModel.MethodFactory.opration.impl;import com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation;/** * Created by luzhenyu on 2016/8/22. */public class SubOpration extends Operation { @Override public double getResult() { return numA - numB; }}抽象工厂类:用于创建对应操作工厂
package com.zndroid.dm.FactoryModel.MethodFactory;import com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation;/** * Created by luzhenyu on 2016/8/19. */public interface IMethodFactory { Operation createOpration();}具体工厂类:用于实现创建何种工厂
package com.zndroid.dm.FactoryModel.MethodFactory.implFact;import com.zndroid.dm.FactoryModel.MethodFactory.IMethodFactory;import com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation;import com.zndroid.dm.FactoryModel.MethodFactory.opration.impl.AddOpration;/** * Created by luzhenyu on 2016/8/19. */public class AddFactory implements IMethodFactory { @Override public Operation createOpration() { return new AddOpration(); }}
package com.zndroid.dm.FactoryModel.MethodFactory.implFact;import com.zndroid.dm.FactoryModel.MethodFactory.IMethodFactory;import com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation;import com.zndroid.dm.FactoryModel.MethodFactory.opration.impl.SubOpration;/** * Created by luzhenyu on 2016/8/22. */public class SubFactory implements IMethodFactory { @Override public Operation createOpration() { return new SubOpration(); }}具体使用:
log("----------------我是分割线-----------------"); IMethodFactory addFactory = new AddFactory(); com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation addOperation = addFactory.createOpration(); addOperation.setNumA(444); addOperation.setNumB(222); log(addOperation.getResult() + ""); IMethodFactory subFactory = new SubFactory(); com.zndroid.dm.FactoryModel.MethodFactory.opration.Operation subOperation = subFactory.createOpration(); subOperation.setNumA(444); subOperation.setNumB(222); log(subOperation.getResult() + ""); log("========================================");
0 0
- 设计模式之——工厂方法设计模式
- 设计模式——工厂模式之工厂方法
- 设计模式—工厂方法
- 设计模式—工厂方法
- C#设计模式之2——工厂方法模式
- 设计模式之2——工厂方法模式
- 学习设计模式之禅——工厂方法模式
- 23种设计模式之——工厂方法模式
- 《设计模式之禅》——工厂方法模式
- 设计模式之(一)——工厂方法模式
- 设计模式之禅——工厂方法模式
- Java设计模式之——工厂方法模式
- 23种设计模式之——工厂方法模式
- 设计模式随笔之——工厂方法模式
- 23种设计模式之——工厂方法模式
- Android设计模式之——工厂方法模式
- 设计模式之—工厂方法模式(FactoryMethod)-Java实现
- PHP生成对象之设计模式—工厂方法模式
- 【约瑟夫环—数学策略】
- Android阅读源码的几种方法
- MySQL配置
- HDU-1017
- Android类似微博弹出窗口效果并且点击事件
- 设计模式之——工厂方法设计模式
- 383.[LeetCode]Ransom Note
- java短信发送,验证功能
- 数据结构上机实验之二分查找
- C++学习-类和对象
- SQL注入语句大全
- 初识Androidannotation
- maven项目移除Maven Dependencies后如何再添加进去
- MySQL体系结构