【学习打卡】第八天 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个小时,重新学习一下设计模式 更加清楚知道模板方法的应用以及如何在自己项目当中去使用它 大家一起加油 💪🏻
随时随地看视频