设计模式之模版步骤模式

设计模式之模版方法模式

一、使用场景

当我们的代码中设计了一个算法流程a(),该算法流程依赖与其它的几个流程b(),c(),d()等等,并且系统中对b(),c(),d()这几个被依赖的流程可能实现的方式是多种多样的,这个时候我们就能够使用方法模版模式了。我们暂且先把这个设计模式实现了,再来讨论他的优点吧。

二、代码举例实现

现在有一个People类,该类要实现一个对其一生总结的方法mylife(),方法的实现过程包含了三项内容,这三项内容分别为学习study(),工作work(),结婚marry(),但是针对不同的人群这三个方法有不同的实现方式,为了实现对mylife代码的重用,我们在People的mylife()中分别调用study(),work(),marry()三个方法,但是在People中只是声明这三个方法而不具体实现它们,后面针对不同的人群我们给这三个方法以不同的实现,并且根据多态的原理在以后People的子类(不同的人群类)中,我们不需要重写mylife()方法了,我们只需要重写被mylife()依赖的三个方法即可实现不同人群的不同mylife()的效果。

下面贴出代码:

public abstract class People {
	
	public void mylife(){
		
		study();
		work();
		marry();
	}
	
	public abstract void study();
	
	public abstract void work();
	
	public abstract void marry();
}

mylife()的实现其实就是所谓的模版方法,在People的子类中,我们再也不需要重新实现mylife()了,需要做的只是重写study(),work(),marry()即可。

public class Banker extends People{
	
	@Override
	public void marry() {
		
		System.out.println("老婆好漂亮,我也好幸福");
	}
	@Override
	public void study() {
		
		System.out.println("边学习边恋爱");
	}
	
	@Override
	public void work() {
		
		System.out.println("啥也不干,大把大把的钱啊");
	}
}

这是银行家的一生啊

public class SoftwareEngineer extends People{
	
	@Override
	public void marry() {
		
		System.out.println("结婚了,但是没时间陪老婆");
	}
	
	@Override
	public void study() {
		
		System.out.println("学习软件设计,特别难懂,头发都掉了");
	}
	
	@Override
	public void work() {
		
		System.out.println("天天加班啊,好累");
	}
	
}

这是亲爱的的猿们,他们生活在水深火热之中啊

下面贴出模版方法模式的类图:

设计模式之模版步骤模式

三、总结

虽然猿们很辛苦,但是学会了方法模版模式后,我们就能又少些几行代码了,毕竟我们重用了mylife()的代码。