设计模式之工厂模式
来源:互联网 发布:朱晓天 人工智能 编辑:程序博客网 时间:2024/05/17 06:10
现在我的感觉是,之所以花大力气,学习设计模式,主要是为了程序以后的扩展,而我也越来越意识到,程序扩展的重要性。而java之所以容易扩展主要得力与面向对象里的继承和多态。
今天写了个工厂模式实验代码,在此记下来,留着以后学习回忆。
工厂方法模式与简单工厂模式最大的区别在于: 简单工厂最大的优点在于,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态示例化相关的类,对于客户端来说,去除了与具体产品的依赖。(出自大话设计模式)
它的uml建模图据说是这样的
第一次画建模图^_^
具体代码就在这里
package com.dic.simple.operation;/** * 运算类顶级接口 * * * @author roger.han(hanrongjie2011@gmail.com) * */public interface Operation {/** * * @param a * @param b */ public void operate(int a,int b); }
package com.dic.simple.operation;/** * 加法操作的具体实现 * * @author roger.han(hanrongjie2011@gmail.com) * */public class AddOperation implements Operation{/* * (non-Javadoc) * @see com.dic.simple.operation.Operation#operate(int, int) */@Overridepublic void operate(int a,int b) {// TODO Auto-generated method stubSystem.out.println(a+b);}}
package com.dic.simple.operation;/** * 乘法运算的具体实现 * * @author roger.han(hanrongjie2011@gmail.com) * */public class MultiplyOperation implements Operation{ /* * (non-Javadoc) * @see com.dic.simple.operation.Operation#operate(int, int) */@Overridepublic void operate(int a, int b) {// TODO Auto-generated method stubSystem.out.println(a*b);}}
package com.dic.simple.factory;import com.dic.simple.operation.AddOperation;import com.dic.simple.operation.MultiplyOperation;import com.dic.simple.operation.Operation;/** * 简单工厂类 用于生成具体的操作对象 <span style="color:#ff0000;">具体生成对象的逻辑在简单工厂里实现</span> * * @author roger.han(hanrongjie2011@gmail.com) * */public class SimpleFactory {/** * * @param i 此处偷懒,0-->add 1-->multiply * @return */public static Operation getOperation(int i){Operation oper;switch(i){case 0:oper=new AddOperation();break;case 1:oper=new MultiplyOperation();break;default: return null;}return oper;}}
package com.dic.client;import com.dic.simple.factory.SimpleFactory;import com.dic.simple.operation.Operation;/** * 简单工厂的调用客户端 * @author roger.han(hanrongjie2011@gmail.com) * */public class SimpleClient {public static void main(String[] args){Operation o=SimpleFactory.getOperation(1);o.operate(1, 2);}}
抽象工厂的uml图据说是这样
代码是这样
package com.dic.factory;import com.dic.simple.operation.Operation;/** * * 抽象工厂顶级接口类 * * * * @author roger.han(hanrongjie2011@gmail.com) * */public interface IFactory{ public Operation getOperation();}
package com.dic.factory;import com.dic.simple.operation.AddOperation;import com.dic.simple.operation.Operation;/** * * 加法工厂 生产加法类 * * @author roger.han(hanrongjie2011@gmail.com) * * * */public class AddOperationFatory implements IFactory{@Overridepublic Operation getOperation() {// TODO Auto-generated method stubreturn new AddOperation();}}
package com.dic.factory;import com.dic.simple.operation.MultiplyOperation;import com.dic.simple.operation.Operation;/** * * 乘法工厂 生产乘法法类 * * @author roger.han(hanrongjie2011@gmail.com) * * * */public class MultiplyOperationFactory implements IFactory {@Overridepublic Operation getOperation() {// TODO Auto-generated method stubreturn new MultiplyOperation();}}
package com.dic.client;import com.dic.factory.IFactory;import com.dic.factory.MultiplyOperationFactory;import com.dic.simple.operation.Operation;/** * 抽象工厂调用客户端 * * @author work * */public class Client{public static void main(String[] args){IFactory i=new MultiplyOperationFactory();//<span style="color:#ff0000;">而抽象工厂的逻辑在这里</span>Operation o=i.getOperation();o.operate(1,2);}}
好了 终于把简单工厂和抽象工厂写完了 这时候如果想加个减法的话 简单工厂需要怎么做 而抽象工厂又需要怎么做
简单工厂要修改SimpleFactory的代码 还有客户端的代码 来获得减法类 ,抽象工厂又需要怎么做,它需要写一个新的工程 MinusFactory 来集成IIFactory实现产生运算累得方法
再客户端程序需要改下,具体的工厂。那个更好呢?老鸟是这么说的 简单工厂违背了开放封闭原则(软件实体《类,模块,函数等》应该可以扩展但不可已修改),但保持了封装对象创建过程的优点,这两种途径都是集中封装了对象的创建过程,使得更换对象时,不许要做大的改动就可以实现,降低了客户端程序域产品对象的耦合,抽象工厂模式是简单工厂模式的进一步抽象和推广(摘自大话设计模式)
老鸟是菜鸟进步的阶梯 再次感谢那些乐于分享经验的老鸟
2 0
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- 分布式系统设计系列 -- 概要
- Linux 学习笔记---文件系统与LVM磁盘管理
- 如何值通过xib自定义cell
- uva 718 - Skyscraper Floors(数论+bfs)
- HDU 3694 Fermat Point in Quadrangle (费马定理求四边形的费马点)
- 设计模式之工厂模式
- ZOJ-1168
- linux 常用命令
- 【C语言天天练(二二)】位操作
- NYOJ-733 万圣节派对
- CodeBlocks.Ubuntu.无法输入
- 2014年吉大cs复试笔试
- 线段树(1):点修改
- tomcat下oralce集群配置url