前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(七)——模板模式

设计模式(七)——模板模式

作者头像
小森啦啦啦
发布2019-07-13 13:34:39
2690
发布2019-07-13 13:34:39
举报
文章被收录于专栏:IT笔记分享IT笔记分享

模板模式

定义一个操作中的算法框架,将一些步骤延迟到子类中,使子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

子类重写或实现父类的方法。再由父类的模板方法调用这些公共的方法。所以被子类重写或者不必暴露的方法一般定义为私有的。

优点

  • 封装不变不封,扩展可变部分。
  • 提取公共部分代码,便于维护。
  • 行为由父类控制,子类实现。

使用场景

  • 多个子类有公共的方法,并且逻辑基本相同。
  • 重要、复杂的算法,可以把核心算法设计为模板方法,相关细节由子类实现。
  • 重构时候,经相同代码提取到父类,再通过钩子函数约束其行为。

代码

GitHub

定义抽象模板类

代码语言:javascript
复制
public abstract class AbstractTemplate {    protected abstract void method1();    protected abstract void method2();    public void method(){        this.method1();        this.method2();    }}

定义子类实现

代码语言:javascript
复制
public class ConcreteTemplate1 extends AbstractTemplate {    @Override    protected void method1() {        System.out.println("模板1业务逻辑方法1");}    @Override    protected void method2() {        System.out.println("模板1业务逻辑方法2");    }}public class ConcreteTemplate2 extends AbstractTemplate {    @Override    protected void method1() {        System.out.println("模板2业务逻辑方法1");    }    @Override    protected void method2() {        System.out.println("模板2业务逻辑方法2");    }}

测试类

代码语言:javascript
复制
public static void main(String[] args){    AbstractTemplate template1 = new ConcreteTemplate1();    AbstractTemplate template2 = new ConcreteTemplate2();    template1.method();    System.out.println("-----------------");    template2.method();}
代码语言:javascript
复制
模板1业务逻辑方法1模板1业务逻辑方法2-----------------模板2业务逻辑方法1模板2业务逻辑方法2

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT笔记分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模板模式
    • 优点
      • 使用场景
        • 代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档