<Java设计模式>—简单工厂模式
2016-02-04 21:57
731 查看
<Java设计模式>—简单工厂模式
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
下面来看下一个运算对象的简单工程的设计模式UML:
具体的对应关系:
工厂类角色——>简单工厂类
抽象产品角色——>运算类
具体产品角色——>加法类,减法类,乘法类,除法类
根据上面UML,写咱们的代码:
个人总结:相对于之前直接new出对象,降低了耦合性,客户端只要认识两个类(Operation、OperationFactory),也就是说客户端都无需导入像加法类,减法类等的包,客户端只需给2数,和相应的计算方式,然后得出结果,至于你是怎么运算,客户端并不关心;但是有个弊端就是假如将来需要拓展,那就比较麻烦了,那我们就必须去修改OperationFactory这个类中的switch代码,如果将来拓展很多的算法,那么这个类将是非常臃肿的。
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
下面来看下一个运算对象的简单工程的设计模式UML:
具体的对应关系:
工厂类角色——>简单工厂类
抽象产品角色——>运算类
具体产品角色——>加法类,减法类,乘法类,除法类
根据上面UML,写咱们的代码:
/** * 运算类 */ abstract class Operation{ public double numberA; public double numberB; public abstract double getResult(); } /** * 加法类(减法(OperationSub)、乘法(OperationMul)、除法(OperationDiv)请参考加法写法) */ class OperationAdd extends Operation{ public double getResult(){ return numberA+numberB; } } /** * 简单工厂类 */ class OperationFactory{ public static final int ADD = 1;//加法 public static final int SUB = 2;//减法 public static final int MUL = 3;//乘法 public static final int DIV = 4;//除法 public Operation createOperation(int operationType){ swtich(operationType){ case ADD: return new OperationAdd(); break; case SUB: return new OperationSub(); break; case MUL: return new OperationMul(); break; case DIV: return new OperationDiv(); break; } } } /** * 客户端代码 **/ class Client{ public static void main(String[] args){ Operation operation= OperationFactory.createOperation(OperationFaction.ADD); Operation.numberA = 22; Operation.numberB = 23; System.out.println(“远算结果:”+operation.getResult()); } }
个人总结:相对于之前直接new出对象,降低了耦合性,客户端只要认识两个类(Operation、OperationFactory),也就是说客户端都无需导入像加法类,减法类等的包,客户端只需给2数,和相应的计算方式,然后得出结果,至于你是怎么运算,客户端并不关心;但是有个弊端就是假如将来需要拓展,那就比较麻烦了,那我们就必须去修改OperationFactory这个类中的switch代码,如果将来拓展很多的算法,那么这个类将是非常臃肿的。
相关文章推荐
- java.lang.ClassNotFoundException: org.directwebremoting.servlet.DwrServlet
- Java中的访问控制权限
- 加密号码
- 简单的Java单元测试框架
- spring3.0定时器 xml配置和注解方式
- Java部分异常及处理
- Caused by: java.lang.ClassNotFoundException: flex.messaging.io.BeanProxy
- mac 自动配置java版本
- mac 自动配置java版本
- Quartz-Cron Expression 使用介绍
- springmvc(十四)springmvc注解开发-springmvc参数绑定-数组绑定
- Java并发程序基础
- java 可扩充数组实现向量
- Win7下配置环境变量
- 三个实例演示 Java Thread Dump 日志分析
- 各种 Java Thread State 第一分析法则
- 线上Java应用排查和诊断规范
- 【转】Java 5种字符串拼接方式性能比较。
- Java中的静态绑定和动态绑定
- Java NIO4:Socket通道