您的位置:首页 > 其它

设计模式之模版方法模式

2014-04-11 19:37 169 查看

一、使用场景

当我们的代码中设计了一个算法流程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()的代码。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息