工厂模式例子之计算器的实现

1 这里是一个计算器,运算规则为 加减乘除,输出相应的结果

2 UML图


3  java类

Counter.java  (抽象接口)

package DesignPattern.calculator;

public interface Counter {
  public double getResult();
}


AddCounter.java (加法类)


package DesignPattern.calculator;

public class AddCounter implements Counter {
	private double x;
	private double y;
	public AddCounter(double x,double y){
		this.x = x;
		this.y = y;
	}
	
	@Override
	public double getResult() {
		return this.x + this.y;
	}

}

DivCounter.java (减法类)

package DesignPattern.calculator;

public class DivCounter implements Counter {
	private double x;
	private double y;
	public DivCounter(double x,double y){
		this.x = x;
		this.y = y;
	}
	
	@Override
	public double getResult() {
		return this.x - this.y;
	}

}


MulCounter.java (乘法类)

package DesignPattern.calculator;

public class MulCounter implements Counter {
	private double x;
	private double y;
	public MulCounter(double x,double y){
		this.x = x;
		this.y = y;
	}
	
	@Override
	public double getResult() {
		return this.x * this.y;
	}

}

SubCounter.java (除法类)
package DesignPattern.calculator;

public class SubCounter implements Counter {
	private double x;
	private double y;
	public SubCounter(double x,double y){
		this.x = x;
		this.y = y;
	}
	
	@Override
	public double getResult() {
		double result = 0;
		if(this.y == 0){
			try {
				throw new MyException("被除数为0");
			} catch (MyException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			result = this.x/this.y;
		}

		
		return result;
	}

}

ErrorCounter.java (未知规则,如果客户端传错了类型,则调用该类)

package DesignPattern.calculator;

public class ErrorCounter implements Counter {
	private double x;
	private double y;
	public ErrorCounter(double x,double y){
		this.x = x;
		this.y = y;
	}
	
	@Override
	public double getResult() {
		try {
			throw new MyException("异常:错误的计算类");
		} catch (MyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}

}


MyException.java (自定义异常类,处理异常)
package DesignPattern.calculator;

public class MyException extends Exception {
	public MyException(String str){
		System.out.println(str);
	}
}


Client.java (客户端)

package DesignPattern.calculator;

public class Client {

	public static void main(String[] args) {
		double x = 10,y =20;
		Counter Counter;
		// 加法
		 Counter = Factory.createCounter('+', x, y);
		System.out.println("加法结果为 : " + Counter.getResult());
		//减法
		Counter = Factory.createCounter('-', x, y);
		System.out.println("减法的结果为 : " + Counter.getResult());
		//乘法
		Counter = Factory.createCounter('*', x, y);
		System.out.println("乘法的结果为 : " + Counter.getResult());
		//除法
		Counter = Factory.createCounter('/', x, y);
		System.out.println("除法的结果为 : " + Counter.getResult());
		//除法 ,被除数为0
		Counter = Factory.createCounter('/', x, 0);
		System.out.println("除法的结果为 : " + Counter.getResult());
		//未知
		Counter = Factory.createCounter('?', x, y);
		System.out.println("未知规则的结果 : " + Counter.getResult());

	}

}


4 输出结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值