java设计模式-简单工厂模式
2016-11-02 16:21
459 查看
Java是面向对象的语言,所以在代码中会出现许多的创建对象的现象。首先来看下,一个简单的计算器功能,来引出简单工厂模式(也叫静态工厂模式)的好处。
简单工厂模式:方便创建对象而不需要知道创建对象的过程。
常见代码:
代码基类:
加法类:
客户端测试类:
解决方案:从客户端测试代码来看,不同的运算符需要实例不同的类,这样会导致客户端需要很多的判断。如何避免这样的现象,我们可以把判断运算符实例化对象的这个代码写到工厂中,就可以了。
简单工厂类:
改造后的客户端测试代码:
简单工厂模式:方便创建对象而不需要知道创建对象的过程。
常见代码:
代码基类:
package com.zwz.calculator; public abstract class Operation { private int num1; private int num2; //计算方法 public abstract int getResult(); public int getNum1() { return num1; } public void setNum1(int num1) { this.num1 = num1; } public int getNum2() { return num2; } public void setNum2(int num2) { this.num2 = num2; } }
加法类:
package com.zwz.calculator; public class OperationAdd extends Operation { @Override public int getResult() { return getNum1() + getNum2(); } }减法类:
package com.zwz.calculator; public class OperationSubtr extends Operation { @Override public int getResult() { return getNum1() - getNum2(); } }
客户端测试类:
package com.zwz.calculator; import java.util.Scanner; public class OperationTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int result=0; System.out.println("请输入第一个数字!"); int num1=scanner.nextInt(); System.out.println("请输入运算符!"); String oper=scanner.next(); System.out.println("请输入第二个数字!"); int num2=scanner.nextInt(); if("+".equals(oper)){ OperationAdd operation = new OperationAdd(); operation.setNum1(num1); operation.setNum2(num2); result = operation.getResult(); }else if("-".equals(oper)){ OperationSubtr operation = new OperationSubtr(); operation.setNum1(num1); operation.setNum2(num2); result = operation.getResult(); }else{ System.out.println("运算类型不符合"); } System.out.println("结果是:"+result); } }
解决方案:从客户端测试代码来看,不同的运算符需要实例不同的类,这样会导致客户端需要很多的判断。如何避免这样的现象,我们可以把判断运算符实例化对象的这个代码写到工厂中,就可以了。
简单工厂类:
package com.zwz.calculator; /** * 简单工厂类 * @author zwz * @Date 2016-11-02 16:11:41 * */ public class OperationFactory { public static Operation creationOperation(String operation){ Operation oper=null; switch (operation) { case "+": oper=new OperationAdd(); break; case "-": oper=new OperationSubtr(); break; default: break; } return oper; } }
改造后的客户端测试代码:
package com.zwz.calculator; import java.util.Scanner; public class OperationTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int result=0; System.out.println("请输入第一个数字!"); int num1=scanner.nextInt(); System.out.println("请输入运算符!"); String oper=scanner.next(); System.out.println("请输入第二个数字!"); int num2=scanner.nextInt(); Operation operation = OperationFactory.creationOperation(oper); operation.setNum1(num1); operation.setNum2(num2); result = operation.getResult(); System.out.println("结果是:"+result); } }
相关文章推荐
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- Java实践之路(设计模式)——工厂模式(简单工厂)
- Java与设计模式(01)--简单工厂模式
- 追MM与设计模式的JAVA实现-简单工厂方法
- java简单工厂设计模式
- java中的设计模式(一)--简单工厂模式
- java设计模式之简单工厂模式
- Java设计模式----------简单工厂类+工厂方法(FactoryMethod)
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 设计模式--创建模式--简单工厂模式--java
- java 设计模式-简单工厂
- 设计模式之一:Java中的简单工厂模式
- JAVA设计模式 — 简单工厂模式
- Java设计模式---简单工厂
- JAVA设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- Java设计模式:工厂模式(一)简单工厂模式
- 黑马程序员_JAVA设计模式之简单工厂
- Java设计模式学习1—简单工厂模式
- Java--设计模式之简单工厂模式
- java设计模式笔记之简单工厂