设计模式作业2

1.小王正在编写一个简单的计算器程序,要求输入两个整数和运算符号(加、减、乘、除),输出计算结果。小王用面向过程方法编写了下面的代码。请采用面向对象方法通过恰当的设计模式对小王的代码进行重构。

int main()

{

  int numa,numb; char oper; double result;

  cin>>numa>>numb;  cin>>oper;

  switch(oper) {

    case '+': result=numa+numb; break;

    case '-': result=numa-numb; break;

    case '*': result=numa*numb; break;

    case '/': result=numa/(double)numb; break;

  }

  cout<<result<<endl;

  return 0;

}

 

代码设计:

基类:

public abstract class Operate {
	abstract double oper(double a,double b);
}

子类:

public class Add extends Operate{

	@Override
	double oper(double a, double b) {
		// TODO Auto-generated method stub
		return (a+b);
	}

}

public class Sub extends Operate{
	
	@Override
	double oper(double a, double b) {
		// TODO Auto-generated method stub
		return (a-b);
	}

}
public class Div extends Operate {

	@Override
	double oper(double a, double b) {
		// TODO Auto-generated method stub
		return (a/b);
	}

}

public class Mul extends Operate {

	@Override
	double oper(double a, double b) {
		// TODO Auto-generated method stub
		return (a*b);
	}

}

函数及测试代码:

import java.util.Scanner;

public class Test {
	Operate creat_op(String c) {
		Operate op=null;
		if(c.equals("+"))
			op=new Add();
		else if(c.equals("-"))
			op=new Sub();
		else if(c.equals("/"))
			op=new Div();
		else if(c.equals("*"))
			op=new Mul();
		else {
			System.out.println("null");
		}
		return op;
	}
	double make_op(Operate op,double a,double b) {
		double result = 0;
		if(op.equals(null)) {
			System.out.println("error");
		}
		else {
			result=op.oper(a, b);
		}
		return result;
		
	}
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		System.out.println("Please input a");
		double a=sc.nextDouble();
		System.out.println("Please input b");
		double b=sc.nextDouble();
		System.out.println("Please input op");
		sc.nextLine();
		String c=sc.nextLine();
		Test test=new Test();
		double result=test.make_op(test.creat_op(c), a, b);
		System.out.print("Result is :"+result);
		
	}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值