码迷,mamicode.com
首页 > 其他好文 > 详细

模版方法模式

时间:2015-03-11 14:51:04      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:设计模式   模版方法模式   

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


模版方法模式

标签:设计模式   模版方法模式   

原文地址:http://blog.csdn.net/u012613903/article/details/44197905

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!