模板方法概念
模板设计模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
模板方法类关系图
模板方法代码
设计模板抽象类Vehicle提供抽象方法start、stop、alarm,最关键的是提供方法run,里面限定了start、stop、alarm的运行顺序!
注意:run方法只是限定各个方法的运行顺序,并不关注每个方法的具体实现细节
public abstract class Vehicle {
//首先是车要能发动
public abstract void start();
//能发动,那还要能停下来
public abstract void stop();
//喇叭会出声音,是滴滴叫,还是哔哔叫
public abstract void alarm();
//那模型应该会跑吧,管是人推的,还是电力驱动,总之要会跑
public void run() {
// 先发动汽车
this.start();
// 引擎开始轰鸣
this.alarm();
// 到达目的地就停车
this.stop();
}
设计类Car继承Vehicle,重写了start、stop和alarm方法
public class Car extends Vehicle {
@Override
public void start() {
System.out.println("汽车通过发动机启动");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("汽车通过踩刹车方式停车");
}
@Override
public void alarm() {
// TODO Auto-generated method stub
System.out.println("汽车按喇叭,嘀嘀嘀");
}
}
设计类Bike继承Vehicle,重写了start、stop和alarm方法
public class Bike extends Vehicle {
@Override
public void start() {
System.out.println("自行车通过链条齿轮启动");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("自行车通过手闸方式停车");
}
@Override
public void alarm() {
// TODO Auto-generated method stub
System.out.println("自行车按铃,铃铃铃");
}
}
编写模板方法测试类,可以看到不同的实例执行抽象类Vehicle的 run方法后,输出了各自start、stop、alarm方法的实现
public class TestTemplate {
public static void main(String[] args) {
Vehicle car=new Car();
car.run();
Vehicle bike=new Bike();
bike.run();
}
}
运行结果
汽车通过发动机启动
汽车按喇叭,嘀嘀嘀
汽车通过踩刹车方式停车
自行车通过链条齿轮启动
自行车按铃,铃铃铃
自行车通过手闸方式停车
如果想下载源码,可以下载
https://download.csdn.net/download/liwenxiang629/88628190
一句话总结模板方法
抽象类中的方法run能够限定各个子类方法start、stop、alarm的运行顺序,而并不关注每个方法的具体实现细节
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!