【学习打卡】第八天 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 设计图
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"); } }
测试结果如下
模板设计---源码解析
在jdk当中 AbstractList
这个类当中 使用模板方法
还有在servlet 当中 HttpServlet
当中使用的
在mybatis 当中的应用 BaseExecutor
的应用 使用模板方法模式
今天学习课程共用了2个小时,重新学习一下设计模式 更加清楚知道模板方法的应用以及如何在自己项目当中去使用它 大家一起加油 💪🏻
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦