简单计算器

简单计算器

今天看了下设计模式的简单工厂模式,对照着写了个简单的计算器,代码非常简单

运算符操作类

public abstract class OPerator {

    private double numberA;
    private double numberB;
    private double result;

    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 double getResult() {
        return result;
    }

    public void setResult(double result) {
        this.result = result;
    }
}

运算操作工厂

public class OpFactory{
    public OPerator oPerator = null;
    public OPerator compute(char opStr,double numberA, double numberB){
	        switch (opStr){
	            case '+':
	                oPerator = new Add(numberA,numberB);
	                break;
	            case'-':
	                oPerator = new Sub(numberA,numberB);
	                break;
	            case'*':
	            	oPerator= new Mul(numberA,numberB);
	            	break;
	            case'/':
	            	oPerator = new Div(numberA, numberB);
	            	break;
	            default:
	            	System.out.println("计算错误!");
	            	break;
	        }
        return oPerator;
    }
}

加减乘除运算实现

public class Add extends OPerator{

    public Add(double numberA, double numberB){
        this.setNumberA(numberA);
        this.setNumberB(numberB);
        this.setResult(this.getNumberA()+this.getNumberB());
    }
}

public class Sub extends OPerator{
	
    public Sub(double numberA, double numberB){
        this.setNumberA(numberA);
        this.setNumberB(numberB);
        this.setResult(this.getNumberA()-this.getNumberB());
    }
}

public class Mul extends OPerator{
    public Mul(double numberA, double numberB){
        this.setNumberA(numberA);
        this.setNumberB(numberB);
        this.setResult(this.getNumberA()*this.getNumberB());
    }
}

public class Div extends OPerator{
	public Div(double numberA, double numberB){
		this.setNumberA(numberA);
		this.setNumberB(numberB);
		if(0 == this.getNumberB()){
			try {
				throw new Exception("除数不能为0");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else{
			this.setResult(this.getNumberA()/this.getNumberB());
		}
	}
}

测试类

	public class Mc {
    @Test
    public void addTest(){
        System.out.println("请输入数字:");
        Scanner scanner1 = new Scanner(System.in);
        double numberA = scanner1.nextDouble();

        System.out.println("请输入操作符:'+','-','*','/'");
        Scanner sc = new Scanner(System.in);
        String opStr = sc.nextLine();

        System.out.println("请输入数字:");
        Scanner scanner2 = new Scanner(System.in);
        double numberB = scanner2.nextDouble();

        OPerator oPerator = new OpFactory().compute(opStr.charAt(0),numberA,numberB);

        System.out.println("结果:"+oPerator.getResult());
    }

}

第一次写:若是有不对的地方,欢迎拍砖。其他的我也不会说话了,感觉没啥话,巴拉巴拉一大堆,想吐槽了.....拜拜,下次在写

平凡是我的一个标签
原文地址:https://www.cnblogs.com/guyanzy/p/8688034.html