设计模式之简单工厂模式
来源:互联网 发布:c4d软件安装教程 编辑:程序博客网 时间:2024/06/17 14:08
简单工厂模式实现的目标是使业务层和界面进行分离。还是举例说明:
现在有一个需求让你实现类似计算机的加减乘除功能,如果我们不是用设计模式思想,把所有的业务代码写到一个类中,也能实现需求但是,如果增加新的需求呢?比如我在原来的基础上增加开根的需求,那么你就要对已经写好的代码进行更改,极有可能出现把已经完成的代码“破坏”的情况,而且不利于别人对项目的二次开发。下面我们引入简单工厂模式:先贴出代码(Java)
业务层code
package com.lava.FactoryPattern;/* * 作为加减乘除的基类。 */public abstract class Operation {public double numberA;public double numberB;public double getNumberA() {return numberA;}public void setNumberA(double numberA) {this.numberA = numberA;}public double getNumberB() {return numberB;}public void setNumberB(double numberB) {this.numberB = numberB;}public abstract double getResult();}
package com.lava.FactoryPattern;/* * 加操作 */public class OperationAdd extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA+numberB;}}
package com.lava.FactoryPattern;/* * 减操作 */public class OperationSub extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA-numberB;}}
package com.lava.FactoryPattern;/* * 乘操作 */public class OperationMul extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA*numberB;}}
package com.lava.FactoryPattern;/* * 除操作 */public class OperationDiv extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA/numberB;}}
简单工厂:
package com.lava.FactoryPattern;/* * 工厂模式 */public class OperationFactory {public Operation getOper(char c){Operation op=null;switch (c){case '+': op=new OperationAdd();break;case '-': op=new OperationSub();break;case '*': op=new OperationMul();break;case '/': op=new OperationDiv();break;}return op;}}
控制台
package com.lava.FactoryPattern;/* * 控制台 */public class Main {public static void main(String[] args) {Operation oa=new OperationFactory().getOper('+');oa.setNumberA(2);oa.setNumberB(3);System.out.println(oa.getResult());}}
把所有的功能作为不同的类分开看似繁琐,但是有一个极大的优势,如果要增加新的功能你只需要在业务层增加一个OperationSqrt.class 代码就不写了。下面总结一下这样写的优势:
总结:
1、存在的条件是以基类作为基础、很多子类继承它。这要如果没有工厂模式。你需要在控制台上new很多的对象,失去了控制台的意义,控制台不需要知道你具体是怎么实现的,它只要通过'+','-','*','/' 符号,传入数,得到结果就行。
2、在有多个子类时,工厂类的作用是,通过控制台输入的信息,判断我要实例化那个子类(多态特性)。传给控制台即可。
3、有新的需求比如开根,只需要增加OperationSqrt.class,在控制台增加Operation oa=new OperationFactory().getOper('sqr'); 这样实现了程序的灵活性,增强代码的可读性。
4、不需要更改已经写好的类。
简单工厂:控制台通过简单工厂模式知道具体调用了哪个子类。
0 0
- 设计模式 之简单工厂+ 工厂模式
- 设计模式之简单工厂设计模式
- 设计模式之简单工厂模式,工厂模式,策略模式
- 设计模式 之 简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂.
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 无意间把你的个人资料当圣诞礼物,送给了网络犯罪份子吗?
- java变量的初始化顺序
- Mac下使用github
- iOS一步步调试解决内存泄漏
- Elasticsearch学习笔记(二)单节点准实时索引的实现
- 设计模式之简单工厂模式
- JavaScript 时间戳操作:
- POJ 1980 Unit Fraction Partition(dfs)
- C#Timer 控件
- 反射
- Android 录音声波图
- 欢迎使用CSDN-markdown编辑器
- Spring项目中使用Junit单元测试并配置数据源的问题
- Runtime之objc_msgSend函数