设计模式之模板模式

1、什么是模板模式

                在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要要重写方法实现,但调用将以抽象类中定义的方式进行,这种类型的设计模式属于行为型模式

2、意图

        定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定功能。

3、案例 

        开车接口

public abstract class KaiChe {
    public  final void kaiChe(){
        kaiCheMen();
        jiAnQUanDai();
        daHuo();
        guanDang();
        caiYouMen();
    }

    //打开车门
    abstract void kaiCheMen();
    //系安全带
    abstract void jiAnQUanDai();
    //打火
    abstract void daHuo();
    //挂挡
    abstract void guanDang();
    //踩油门
    abstract void caiYouMen();
}

 开宝马车

public class DrivenBaoMa extends KaiChe{
    @Override
    void kaiCheMen() {
        System.out.println("打开宝马车门");
    }

    @Override
    void jiAnQUanDai() {
        System.out.println("系安全带");
    }

    @Override
    void daHuo() {
        System.out.println("使用宝马钥匙打火");
    }

    @Override
    void guanDang() {
        System.out.println("挂一档");
    }

    @Override
    void caiYouMen() {
        System.out.println("踩油门");
    }
}

 测试

public class Test {
    public static void main(String[] args) {
        DrivenBaoMa drivenBaoMa=new DrivenBaoMa();
        drivenBaoMa.kaiChe();
    }
}

 4、优缺点

优点:         

        1、封装不变,扩展可变【部分】

         2、提取公共代码,便于维护

         3、行为有父类控制,子类实现

缺点:

        每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大

5、使用场景 

1、有多个子类共有的方法,且逻辑相同

2、重要的、复杂的方法,可以考虑作为模板方法

注意:为了防止恶意操作,一般模板方法都加上final关键词 

6、你所见到的模板模式 

1、JdbcTemplate

2、RedisTemplate

相关推荐

  1. 设计模式模板模式

    2024-07-19 08:38:02       18 阅读
  2. 设计模式模板方法模式

    2024-07-19 08:38:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 08:38:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 08:38:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 08:38:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 08:38:02       69 阅读

热门阅读

  1. Ubuntu系统中升级OpenSSH到特定版本(如9.8p1)

    2024-07-19 08:38:02       17 阅读
  2. Linux网络 -- TCP FIN包发送超时时间设置

    2024-07-19 08:38:02       25 阅读
  3. 代码trick 类型判断

    2024-07-19 08:38:02       18 阅读
  4. vue如何解决跨域?原理?

    2024-07-19 08:38:02       19 阅读
  5. Go: IM系统基于xorm实现简单的注册和登录功能

    2024-07-19 08:38:02       20 阅读
  6. C语言13 位域

    2024-07-19 08:38:02       22 阅读
  7. Linux:使用vim编辑文件为什么会影响目录的mtime

    2024-07-19 08:38:02       17 阅读
  8. 数据结构讲解

    2024-07-19 08:38:02       20 阅读
  9. C++:类的定义和实例化

    2024-07-19 08:38:02       21 阅读
  10. NumPy库学习之logspace函数

    2024-07-19 08:38:02       21 阅读
  11. springMVC前后端请求参数绑定和传递

    2024-07-19 08:38:02       17 阅读
  12. C++中的socket编程常用接口

    2024-07-19 08:38:02       19 阅读