模版类
package cn.yanxiaohui.service.web.test.template;
/**
* 模版模式
* 旅游的三要素:
* 吃
* 玩
* 休息
* @author yanxh
*
*/
public abstract class Tourism {
public final void comeOn() {
System.out.println("买车票出发~~~");
eat();
play();
sleep();
System.out.println("旅游结束~~~");
}
public abstract void eat();
public abstract void play();
public abstract void sleep();
}
具体实现类
package cn.yanxiaohui.service.web.test.template;
/**
* 去大连旅游
* @author yanxh
*
*/
public class DaLian extends Tourism{
@Override
public void eat() {
System.out.println("吃大连的特色小吃");
}
@Override
public void play() {
System.out.println("去大连看看海");
}
@Override
public void sleep() {
System.out.println("和女朋友一起共度良宵");
}
}
package cn.yanxiaohui.service.web.test.template;
/**
* 去北京旅游
* @author yanxh
*
*/
public class BeiJing extends Tourism{
@Override
public void eat() {
System.out.println("北京烤鸭走起");
}
@Override
public void play() {
System.out.println("不到长城非好汉!");
}
@Override
public void sleep() {
System.out.println("嘿嘿嘿,你懂的");
}
}
测试类
package cn.yanxiaohui.service.web.test.template;
public class Test {
public static void main(String[] args) {
Tourism beiJing = new BeiJing();
beiJing.comeOn();
System.out.println("===========================");
Tourism daLian = new DaLian();
daLian.comeOn();
}
}
结果
描述
首先在父类中定义模板方法的执行流程
将不固定的行为抽取为抽象方法--将来子类根据自己的需求重新编写这个行为
将模版方法设置为final不允许子类重写,否则无意义