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

抽丝剥茧——模板方法设计模式

作者头像
石的三次方
发布2021-01-05 22:30:05
2190
发布2021-01-05 22:30:05
举报
文章被收录于专栏:石的三次方石的三次方

模板方法设计模式

兄弟们好,今天我们来聊一下模板方法设计模式。

我们在日常的业务开发中如果在一个类中存在一些公共的代码一般会选择方法,而在多个类中存在公共的方法一般会提取一个公共类,以此来减少重复代码的书写。而进行的模板方法设计模式也有点类似,只不过它「强调的是将一个任务的公共代码抽取出来,需要根据不同的条件进行不同处理的留给子类重写。」

我们来看一下它的类图实现:

再来给兄弟们解释一下:「开发者将公共的代码抽取到exec代码中,然后根据不同的条件的调用method1method2method3,抽象类可以提供一个默认的方法实现,但是同时也会留给子类修改这些方法的入口。这就是模板方法设计模式的精髓所在了。是不是感觉很简单」

我们先来看一个代码,然后再来聊一点我们以前看到的模板方法设计模式

「抽象类」

代码语言:javascript
复制
abstract class AbstractClass{
    //防止子类重写
    public final void exec(){
        method1();
        method2();
        method3();
    }

    protected void method1(){
        System.out.println("这是方法一");
    }

    protected void method2(){
        System.out.println("这是方法二");
    }

    protected void method3(){
        System.out.println("这是方法三");
    }
}

「具体实现:」

代码语言:javascript
复制
class SubClass extends AbstractClass{
    @Override
    protected void method1() {
        System.out.println("子类改变方法一");
    }

    @Override
    protected void method3() {
        System.out.println("子类改变方法三");
    }
}

「客户端执行」

代码语言:javascript
复制
public static void main(String[] args) {
        SubClass subClass = new SubClass();
        subClass.exec();
    }

代码很简单,就是一个简单的模板方法的演示。兄弟们应该可以发现一个点,在代码中强调了一个思想,「通过父类调用子类的方法,而不是我们常见的通过子类的调用父类的方法,父类需要什么就去子类找什么。」

另外兄弟们,还记得几乎每一个框架都会存在一个生命周期嘛。它怎么实现的,结合今天对的模板方法设计模式思考一下,它事先抽象了一个方法用于执行这一系列的生命周期方法,而这些方法它没有给具体的实现,具体的实现由开发者实现。比如:SpringVue生命周期钩子函数等等。另外我们在写JavaScript的时候,最常见的就是所谓的回调函数,这个东东也是一个模板方法设计模式实现的。

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

本文分享自 石的三次方 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模板方法设计模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档