- 浏览: 400653 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
junchao_qin:
[img][flash=200,200][url][img]引 ...
MyEclipse中使用VSS插件 -
tigerwood008:
IE11不好用!!
js弹出窗口 + 获取上传文件全路径 -
TheMatrix:
$.ajaxSetup({async : false});这种 ...
jquery 中的post和get方法如何同步 -
多多成长记:
Blazeds与java通信 -
ZED.CWT:
[align=ceiinter][/align]
java中利用JFrame创建窗体 【转】
简单工厂模式:
它最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类, 对于客户端来说,去除了与具体产品的依赖。
使用了封装、继承、多态面向对象的三大特性,能做到灵活的修改和扩展,如要修改加法运算,或添加开根号运算,只需添加一个开根号运算的类,并在工厂中的switch case加一分支即可
工厂方法模式:
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得一个类的实例化延迟到其子类。
工厂方法模式实现时,客户端需要决定实例化那个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。想要加功能,本来是改工厂类的,而现在是修改客户端。
工厂方法模式是简单工厂的进一步抽象和推广,由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品都需要加一个产品工厂类,增加了额外的开发量。
实例
实现加减乘除运算
Operation类:
package cn.edu.tju.simpleFactoryPattern; public class Operation { protected double a = 0; protected double b = 0; public double getA() { return a; } public void setA(double a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; } public double getResult() throws Exception{ return 0; } }
继承Operation类,覆盖getResult方法
加法:
package cn.edu.tju.simpleFactoryPattern; public class AddOperation extends Operation{ public double getResult(){ return a + b; } }
减法:
package cn.edu.tju.simpleFactoryPattern; public class SubtractOperation extends Operation{ public double getResult(){ return a - b; } }
乘法:
package cn.edu.tju.simpleFactoryPatern; public class MultiplyOperation extends Operation{ public double getResult(){ return a * b; } }
除法:
package cn.edu.tju.simpleFactoryPattern; public class DivideOperation extends Operation{ public double getResult() throws Exception{ if (b == 0){ throw new Exception("b can not be zero!"); } return a / b; } }
工厂类,包含必要的逻辑判断
package cn.edu.tju.simpleFactoryPattern; public class OperationFactory { public static Operation createOperation(char type){ Operation oper = null; switch(type){ case '+': oper = new AddOperation(); break; case '-': oper = new SubtractOperation(); break; case '*': oper = new MultiplyOperation(); break; case '/': oper = new DivideOperation(); break; } return oper; } }
测试类
package cn.edu.tju.simpleFactoryPattern; import java.util.Scanner; /* * 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类, * 对于客户端来说,去除了与具体产品的依赖。 */ public class Test { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); while (System.in != null) { System.out.print("Please input the formula: "); double a = scanner.nextDouble(); char o = scanner.next().toCharArray()[0]; double b = scanner.nextDouble(); Operation oper = OperationFactory.createOperation(o); oper.a = a; oper.b = b; double result = oper.getResult(); System.out.println("The result is " + result); } } }
工厂方法模式:
运算类不变,把工厂类改为接口,并实现不同的工厂,从而产生不同的产品
工厂接口:
package cn.edu.tju.factoryMethodPattern; public interface OperationFactory { public Operation createOperation(); }
加法工厂:
package cn.edu.tju.factoryMethodPattern; public class AddOperationFactory implements OperationFactory{ @Override public Operation createOperation() { // TODO Auto-generated method stub return new AddOperation(); } }
加法工厂:
package cn.edu.tju.factoryMethodPattern; public class SubtractOperationFactory implements OperationFactory{ @Override public Operation createOperation() { // TODO Auto-generated method stub return new SubtractOperation(); } }
乘法工厂:
package cn.edu.tju.factoryMethodPattern; public class MultiplyOperationFactory implements OperationFactory { @Override public Operation createOperation() { // TODO Auto-generated method stub return new MultiplyOperation(); } }
除法工厂
package cn.edu.tju.factoryMethodPattern; public class DivideOperationFactory implements OperationFactory{ @Override public Operation createOperation() { // TODO Auto-generated method stub return new DivideOperation(); } }
修改测试类
package cn.edu.tju.factoryMethodPattern; import java.util.Scanner; /* * 工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得一个类的实例化延迟到其子类。 * * 工厂方法模式实现时,客户端需要决定实例化那个工厂来实现运算类,选择判断的问题还是存在的,也就是说, * 工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。想要加功能,本来是改工厂类的,而现在是修改客户端。 * * 工厂方法模式是简单工厂的进一步抽象和推广,由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服 * 了它的缺点。但缺点是由于每加一个产品都需要加一个产品工厂类,增加了额外的开发量。 */ public class Test { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); while (System.in != null) { System.out.print("Please input the formula: "); double a = scanner.nextDouble(); char o = scanner.next().toCharArray()[0]; double b = scanner.nextDouble(); OperationFactory operFactory = null; switch(o){ case '+': operFactory = new AddOperationFactory(); break; case '-': operFactory = new SubtractOperationFactory(); break; case '*': operFactory = new MultiplyOperationFactory(); break; case '/': operFactory = new DivideOperationFactory(); break; } Operation oper = operFactory.createOperation(); oper.a = a; oper.b = b; double result = oper.getResult(); System.out.println("The result is " + result); } } }
- Test.rar (17.9 KB)
- 下载次数: 0
发表评论
-
判断二叉树是否平衡及计算二叉树深度和结点个数
2012-09-01 10:12 7652参考:http://blog.csdn.net/zz19880 ... -
【转】java实现二叉查找树
2012-08-31 09:44 1429转自:http://blog.csdn.net/zyj817 ... -
二叉树及其遍历
2012-08-21 09:50 1509转自:http://www.iteye.com/t ... -
java栈中缀表达式转为后缀表达式
2012-07-19 11:33 2413思路: 遇到数字,则输出。 遇到操作符,入栈,在入栈前若该 ... -
java栈实现括号匹配
2012-07-19 09:48 4506算法思想: 做一个空栈,读入字符。 若字符是左运算符,则入 ... -
【转】java静态变量和实例变量的区别
2012-06-20 11:02 1294转自:http://www.2cto.com/kf/20100 ... -
【转】java中会存在内存泄漏吗,请简单描述。
2012-06-20 10:24 1343java中 ... -
【转】java匿名内部类2
2012-06-12 13:45 1170匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类? ... -
【转】java匿名内部类
2012-06-12 13:32 1385java匿名内部类 (2010-11 ... -
【转】JAVA中获取路径
2012-03-25 16:57 817转自:http://wenku.baidu.com/view/ ... -
【转】Map遍历
2012-03-25 16:56 909转自:http://wenku.baidu.com/view/ ... -
【转】java解析xml文件四种方式
2012-03-25 16:54 1325转自:http://wenku.baidu.com ... -
【转】JDOM解析处理xml
2012-03-25 16:52 1196转自http://qingbyqing.iteye.com/b ... -
【转】解析Html页面:HTML Parser的试用
2012-03-24 15:10 1366转自:http://blog.csdn.net/scud/ar ... -
【转】java随机排列数组
2012-02-20 18:58 2326转自:http://blog.csdn.net/liang ... -
设计模式——代理模式
2012-01-06 13:14 1233代理模式: 为其他对象提供一种代理以控制对这个对象的访问 ... -
设计模式——装饰模式
2012-01-05 15:58 1231首先介绍三个重要原则: 依赖倒转原则:高层模块不应该依赖于 ... -
设计模式——策略模式 & 单例模式
2011-12-29 16:26 1471策略模式: * 策略模式定义了算法家族,分别封装起来,让他 ... -
排序算法
2011-12-28 22:41 903参考:http://student.zjzk.cn/cours ... -
String
2011-12-27 10:53 12231. String s = new String(" ...
相关推荐
设计模式——抽象工厂模式源码,设计模式——抽象工厂模式源码
这个是http://blog.csdn.net/dawanganban/article/details/9875873博客中java设计模式的源代码。下载前请先看《设计模式——简单工厂》一文。
经典的设计模式————简单工厂模式,里面有实验文档和实验源代码还有课件助于你的学习
这个是http://blog.csdn.net/dawanganban/article/details/9877593博客中java设计模式的源代码。下载前请先看《设计模式——工厂方法模式》一文。
vs2010实现的软件设计模式——抽象工厂,是软件工程专业学生专业技能之一
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
Android之大话设计模式——:抽象工厂模式借鉴.pdf
Android之大话设计模式——:抽象工厂模式参考.pdf
工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此 时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许 系统不修改工厂类...
写博客上传的代码:blog http://blog.csdn.net/t1234xy4/article/details/52424048
主要介绍了Java设计模式——工厂设计模式详解,具有一定参考价值,需要的朋友可以了解下。
SETema5 软件设计模式——抽象工厂
简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):...
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
设计模式课程资料——简单工厂模式,使用Java实现,在eclipse进行编译
C#工厂设计模式简单实例——计算器 public class Factory { //创建一个静态方法 public static Operation CreateOper(int a, int b, string oper) { //创建一个Operation对象 Operation op = null; switch ...
NULL 博文链接:https://quicker.iteye.com/blog/607944