设计模式之模版模式

模版模式就是一个抽象类把具体的主要算法骨架写好,而具体的算法由子类来实现:

package com.djk.design.Template;

/**
 * 模版模式
 * @author djk
 *
 */
public class TemplateTest 
{
	public static void main(String[] args) 
	{
		CalculationTemplate calculationTemplate = new Add();
	  double result=calculationTemplate.doCalculation();
	  System.out.println(result);
	}
}

/**
 * 算术实体类
 * @author djk
 *
 */
class Calculation
{
	private double  i;
	
	private double j;
	
	private MyOperator myOperator;
	
	public Calculation(double  i,double j,MyOperator myOperator)
	{
		this.i = i;
		this.j = j;
		this.myOperator = myOperator;
	}

	public MyOperator getMyOperator() {
		return myOperator;
	}

	public void setMyOperator(MyOperator myOperator) {
		this.myOperator = myOperator;
	}

	public double getI() {
		return i;
	}

	public void setI(double i) {
		this.i = i;
	}

	public double getJ() {
		return j;
	}

	public void setJ(double j) {
		this.j = j;
	}
	
}

/**
 * 计算模版
 * @author djk
 *
 */
abstract class CalculationTemplate
{
	
	public abstract Calculation setCalculation();
	
	/**
	 * 主要算法
	 * @return
	 */
	public double doCalculation()
	{
		
		Calculation calculation = setCalculation();
		
		if(null == calculation)
		{
			System.out.println("对不起,请您输入正确的算术");
			return 0;
		}
		
		double x = calculation.getI();
		double y = calculation.getJ();
		MyOperator myOperator = calculation.getMyOperator();
		switch (myOperator) {
		case ADD:
			return x+y;
		case MINUS:
			return x-y;
		case MULTIPLY:
			return x*y;
		case DIVIDE:
			try {
			return x/y;
			} catch (Exception e) {
				System.out.println("被除数不能为0");
				return 0;
			}
		default:
			System.out.println("没有找到运算符号");
			return 0;
		}
	}
}

/**
 * 加法
 * @author djk
 *
 */
class Add extends CalculationTemplate
{

	@Override
	public Calculation setCalculation()
	{
		return new Calculation(1,2,MyOperator.DIVIDE);
	}
	
}

enum MyOperator
{
	ADD("+"),MINUS("-"),MULTIPLY("*"),DIVIDE("/");
	
	MyOperator(String value)
	{
		this.value = value;
	}
	
	private String value;

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
}

正如上面的列子所示,抽象类CalculationTemplate是一个模版里面有2个方法一个是抽象的setCalculation()方法,由子类重写,主要是设置算术运算的具体运算方式(加,减,乘,除),另一个方法是doCalculation(),这个方法是根据设置的运算方式而进行具体的运算后得出的结果,子类只要继承CalculationTemplate这个模版然后设置一下具体的运算方式以及2个运算的值然后客户端调用doCalculation就能得到运算后的值。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值