一文读懂Java中的设计模式——模板方法,给大家的代码添点料!

2023-12-14 12:35:32

模板方法概念

模板设计模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

模板方法类关系图

模板方法代码

设计模板抽象类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的运行顺序,而并不关注每个方法的具体实现细节

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!


?

文章来源:https://blog.csdn.net/liwenxiang629/article/details/134990471
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。