模版方法:
在抽象类中定义任务执行顺序,把每一步的实现延迟到子类中
/**
*
* @author ietown
*
*/
public abstract class AbstractGoToWork {
protected abstract void weekUp();
protected abstract void eatBreakfast();
protected abstract void gotoBusStation();
protected abstract void cometoCompany();
protected boolean isGotoBusStation() {
return true;
}
public void gotoWork() {
this.weekUp();
this.eatBreakfast();
if(this.isGotoBusStation()) {
this.gotoBusStation();
}
this.cometoCompany();
}
}/**
*
* @author ietown
*
*/
public class XiaoMingGoToWork extends AbstractGoToWork{
@Override
protected void weekUp() {
System.out.println("起床");
}
@Override
protected void eatBreakfast() {
System.out.println("吃早饭");
}
@Override
protected void gotoBusStation() {
System.out.println("去公交车站");
}
@Override
protected void cometoCompany() {
System.out.println("到公司");
}
}/**
*
* @author ietown
*
*/
public class LaoShiGoToWork extends AbstractGoToWork{
private boolean isBusStation = true;
@Override
protected void weekUp() {
System.out.println("起床");
}
@Override
protected void eatBreakfast() {
System.out.println("吃早饭");
}
/**
* 老师住学校里,不用去公交车站坐车
*/
@Override
protected void gotoBusStation() {
System.out.println("去公交车站");
}
@Override
protected void cometoCompany() {
System.out.println("到教学楼");
}
@Override
protected boolean isGotoBusStation() {
return this.isBusStation;
}
/**
* 钩子方法,设置抽象类中的判断返回值
* @param isBusStation
*/
public void setIsBusStation(boolean isBusStation) {
this.isBusStation = isBusStation;
}
}/**
*
* @author ietown
*
*/
public class Main {
public static void main(String[] args) {
XiaoMingGoToWork xm = new XiaoMingGoToWork();
xm.gotoWork();
System.out.println("---分割线---");
LaoShiGoToWork ls = new LaoShiGoToWork();
ls.setIsBusStation(false);
ls.gotoWork();
}
}
本文通过实例介绍模版方法设计模式的应用,展示如何在抽象基类中定义算法骨架,并允许子类提供具体实现。通过小明和老师的上班过程对比,说明如何使用钩子方法来控制算法步骤。

5904

被折叠的 条评论
为什么被折叠?



