模版方法模式

在软件开发中有时候会遇到这样的情况,某个功能的实现需要多个步骤,这些步骤都是很明确的(第一步是什么,第二步是什么...比如做配菜:第一步是洗菜,第二步是切菜,第三步是装盘);其中某些步骤的做法是固定的(例如洗菜--用水泡洗干净、装盘--把菜摆放到盘子里),而有些步骤的做法就不确定(例如切菜--可以切丁、切块、切片。。。)。所以就有了模版方法模式,在模版方法模式中有一个抽象类,在该抽象类中有一个final的方法,用来完成一个功能(比如制作配菜),同时也有完成这个功能的各个步骤的方法(比如洗菜,切菜,装盘),而在这些代表各个步骤的方法中,那些可以确定的方法就具体是些,而那些不确定的方法就定义为抽象方法留在子类中实现。

package mode.template_method;

/**
 * 
 * 这里定义一个抽象的计算机类,有一个final方法用来完成计算,它首先调用分割操作,把数字分离出来,然后调用了计算方法来计算,
 * 具体要做什么样的计算,在子类中去具体实现
 * 
 * */
public abstract class AbstractCalculator {

	/* 主方法,实现对本类其他方法的调用 */
	public final int calculate(String exp, String opt) {
		int array[] = split(exp, opt);
		return calculate(array[0], array[1]);
	}

	/* 被子类重写的方法 */
	abstract public int calculate(int num1, int num2);

	public int[] split(String exp, String opt) {
		String array[] = exp.split(opt);
		int arrayInt[] = new int[2];
		arrayInt[0] = Integer.parseInt(array[0]);
		arrayInt[1] = Integer.parseInt(array[1]);
		return arrayInt;
	}
}


package mode.template_method;

/**
 * 
 * 这里实现一个计算加法的子类
 * 
 * */
public class Plus extends AbstractCalculator {

	@Override
	public int calculate(int num1, int num2) {
		// TODO Auto-generated method stub
		return num1 + num2;
	}

}


测试

package mode.template_method;

public class Test {
	public static void main(String[] args) {
		String exp = "8+8";
		AbstractCalculator plus = new Plus();
		System.out.println(plus.calculate(exp, "\\+"));
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值