欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模版方法模式

程序员文章站 2022-07-14 09:06:27
...

在软件开发中有时候会遇到这样的情况,某个功能的实现需要多个步骤,这些步骤都是很明确的(第一步是什么,第二步是什么...比如做配菜:第一步是洗菜,第二步是切菜,第三步是装盘);其中某些步骤的做法是固定的(例如洗菜--用水泡洗干净、装盘--把菜摆放到盘子里),而有些步骤的做法就不确定(例如切菜--可以切丁、切块、切片。。。)。所以就有了模版方法模式,在模版方法模式中有一个抽象类,在该抽象类中有一个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, "\\+"));
	}
}