设计模式之模版步骤模式
设计模式之模版方法模式
一、使用场景
当我们的代码中设计了一个算法流程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()的代码。