简单工厂-简单计算器(仿照《大话设计模式》中示例)

一个抽象操作类。

四个分别实现了加、减、乘、除的子操作类。

根据用户前台输入的操作符不同,利用工厂生成对应操作类对象,返回的是一个抽象的操作类。

利用多态调用操作类的计算结果方法(不同操作类的算法不一样)。


好处:各操作算法相隔离,互不影响。增加修改比较灵活。


抽象操作类型

package simpleFactory.calculator;

public abstract class Operation {
	protected int numberA;
	protected int numberB;
	
	public int getNumberA() {
		return numberA;
	}

	public void setNumberA(int numberA) {
		this.numberA = numberA;
	}

	public int getNumberB() {
		return numberB;
	}

	public void setNumberB(int numberB) {
		this.numberB = numberB;
	}

	public abstract int getResult();
}

具体操作类

package simpleFactory.calculator;

public class OperationAdd extends Operation {

	@Override
	public int getResult() {
		// TODO Auto-generated method stub
		return this.getNumberA()+this.getNumberB();
	}

}


操作符枚举

package simpleFactory.calculator;

public enum Operator {
	ADD,SUB,MUL,DIV;
}

工厂类


package simpleFactory.calculator;

public class OperationFactory {
 public static Operation createOperation(String operator){
	 switch(Operator.valueOf(operator)){
	 case ADD:
		 return new OperationAdd();
	 case SUB:
		 return new OperationSub();
	 case MUL:
		 return new OperationMul();
	 case DIV:
		 return new OperationDiv();
	 }
	 return null;
 }
}

程序入口


package simpleFactory.calculator;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainClass {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws NumberFormatException 
	 */
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		while(true){
		System.out.println("请输入第一位操作数字");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int numberA = Integer.parseInt(br.readLine());
		System.out.println("请输入第二位操作数字");
		int numberB = Integer.parseInt(br.readLine());
		System.out.println("请输入操作符");
		 String operator = br.readLine();
		 Operation operation = OperationFactory.createOperation(operator);
		 operation.setNumberA(numberA);
		 operation.setNumberB(numberB);
		 System.out.println(operation.getResult());
		 System.out.println("是否继续Y/N");
		 String continueInput = br.readLine();
		 if(!continueInput.equals("Y")){
			 break;
		 }
		}
	}	

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值