(10)考题抄错会做也白搭——模板方法模式

模板方法模式

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。(摘抄)

模板方法模式使一个比较简单的模式,平时其实编程中肯定用得挺多的,只是不知道叫这个名字罢了,模板方法模式就是把一些固定的行为放到超类中去,去掉这些重复的代码从而减少代码量,这样就提供了一个复用性很好的代码平台。

回调中其实就用到了模板方法模式。

举个生活中很简单的例子,你要到开门进入房间,那么过程总是先开门,再进入房间。开门的方法有很多种,密码,声控,钥匙等,进入房间的方法也有很多种,走进,跑进,爬进,跳进等。那么这时就可以把开门进入房间这个固定的过程作为一个模板,然后具体的方法具体继承实现。

abstract class OpenCome
{
	public abstract void open();
	public abstract void come();
	
	public void templateMethod()
	{
		open();
		come();
		System.out.println("我已进入");
	}
}

class KeyOpenWalkCome extends OpenCome
{

	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println("钥匙开门");
	}

	@Override
	public void come() {
		// TODO Auto-generated method stub
		System.out.println("走入门内");
	}
	
}

class VoiceOpenWalkCome extends OpenCome
{

	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println("声控开门");
	}

	@Override
	public void come() {
		// TODO Auto-generated method stub
		System.out.println("跑入门内");
	}
	
}

class Client
{
	public static void main()
	{
		OpenCome openCome = new KeyOpenWalkCome();
		openCome.templateMethod();
		
		openCome = new VoiceOpenWalkCome();
		openCome.templateMethod();
	}
}

上面举的开门进入的例子代码差不多就是这样实现,当你需要改变实现方法时继承父类重写动作就好了。把一些重复的代码抽象出来变成模板,这样自己使用会更方便,同时代码结构也会比较清晰

文章导航