一文读懂Java中的设计模式——模板方法,给大家的代码添点料!
模板方法概念
模板设计模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
模板方法类关系图
模板方法代码
设计模板抽象类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的运行顺序,而并不关注每个方法的具体实现细节
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!