为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第八天 Java设计模式精讲-Debug方式+内存分析 第十七讲

【学习打卡】第八天 Java设计模式精讲-Debug方式+内存分析 第十七讲

课程名称:Java设计模式精讲-Debug方式+内存分析,真正学懂设计模式

课程章节: 模板方法+Coding+源码解析

主讲老师:Geely

课程内容:

今天学习的内容包括:

什么是模板方法   模板方法 优点 缺点  Coding  源码解析 以及在业务上的应用

课程收获:

模板方法 - 定义与类型

1.定义

 定义了一个算法的骨架,并可以子类为一个或多个步骤提供现实

1.1 特点

   模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤

1.2 类型  : 行为型

2.适用场景

   1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现

   2、各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复

3.缺点

  1.类数目增加

  2.增加了系统实现的复杂度

  3.继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍

4.优点

    1.提高复用性

    2.提高扩展性

    3.符合开闭原则

5.模板方法-扩展

 钩子方法

6.模板方法-相关设计模式

模板方法模式和工厂方法模式

模板方法模式和策略模式

策略模式改变算法流程

模板方法模式 不该变算法流程 而是交给子类去实现

7.uml 设计图

https://img1.sycdn.imooc.com//62f3bd6a000171f215301048.jpg

8.代码如下

package com.zw.design.pattern.creational.behavioral.templatemetod;

public abstract class ACourse {

    protected final void makeCourse(){

        this.makePPT();
        this.makeVideo();
        //钩子方法判断
        if (this.needWriteArticle()){
            this.writeArticle();
        }
        this.packageCourse();
    }

    final void makePPT(){
        System.out.println("编写ppt");
    }

    final void makeVideo(){
        System.out.println("编写视频");
    }

    final void writeArticle(){
        System.out.println("编写手记");
    }
    //钩子方法
    protected boolean needWriteArticle(){
        return false;
    }

    abstract  void packageCourse();
}
package com.zw.design.pattern.creational.behavioral.templatemetod;

public class IOSCourse extends ACourse{
    @Override
    void packageCourse() {
        System.out.println("提供课程的IOS 代码");
        System.out.println("提供课程的图片等");
    }
    private boolean needWriteArticle;


    public IOSCourse(boolean needWriteArticle) {
        this.needWriteArticle = needWriteArticle;
    }

    @Override
    protected boolean needWriteArticle() {
        return this.needWriteArticle;
    }
}
package com.zw.design.pattern.creational.behavioral.templatemetod;

public class SpringCourse extends ACourse{
    @Override
    void packageCourse() {
        System.out.println("提供spring源码课程代码");
    }

    @Override
    protected boolean needWriteArticle() {
        return true;
    }
}

3.测试类

package com.zw.design.pattern.creational.behavioral.templatemetod;

public class Test {
    public static void main(String[] args) {
        System.out.println("后端课程spring 课程 start");
        ACourse springCourse=new SpringCourse();
        springCourse.makeCourse();
        System.out.println("后端课程spring 课程 end");


        //1.0版本 现在IOS没有写手记 该如何去做了?
//        System.out.println("前端课程IOS 课程 start");
//        ACourse ios=new IOSCourse();
//        ios.makeCourse();
//        System.out.println("前端课程IOS 课程 end");
        //比如IOS 我现在有一个需求  IOS 分为 OS 和另外一种语言  OS 需要写手记

        System.out.println("前端课程IOS 课程 start");
        ACourse ios=new IOSCourse(true);//OS 写手记
        ios.makeCourse();
        System.out.println("前端课程IOS 课程 end");

        System.out.println("前端课程IOS 课程 start");
        ACourse ios2=new IOSCourse(false);//OS 不写手记
        ios2.makeCourse();
        System.out.println("前端课程IOS 课程 end");


    }
}

测试结果如下

https://img1.sycdn.imooc.com//62f3bd4f0001900913520958.jpg

模板设计---源码解析

在jdk当中 AbstractList这个类当中 使用模板方法

https://img1.sycdn.imooc.com//62f3bd480001157320800530.jpg

还有在servlet 当中 HttpServlet 当中使用的

https://img1.sycdn.imooc.com//62f3bd3c0001851720600480.jpg

https://img1.sycdn.imooc.com//62f3bd330001835019740798.jpg

在mybatis 当中的应用 BaseExecutor 的应用 使用模板方法模式

https://img1.sycdn.imooc.com//62f3bd330001af4428140944.jpg

今天学习课程共用了2个小时,重新学习一下设计模式 更加清楚知道模板方法的应用以及如何在自己项目当中去使用它  大家一起加油 💪🏻









点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消