您的位置:首页 > 编程语言 > Java开发

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息