1 概念
1 定义
定义一个算法的骨架,允许子类为一个或者多个步骤提供实现。
使子类在不改变算法结构的情况下,重新定义算法的某些步骤
类型:行为型
2 应用场景
3 优缺点
优点:
缺点:
- 类数目增加
- 增加系统复杂度
- 继承自身缺点,如果父类添加新的抽象方法,所有子类都需要改一遍。
2 代码实现
场景:
准备讲解前端和后端课程流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public abstract class ACourse {
protected final void makeCourse(){ this.makePPT(); this.makeVideo(); if(needWriteArticle()){ this.writeArticle(); } this.prepareContentMaterial(); }
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 prepareContentMaterial(); }
|
1 2 3 4 5 6 7 8 9 10 11 12
| public class BackEndCourse extends ACourse { @Override void prepareContentMaterial() { System.out.println("提供课程Java源代码"); }
@Override protected boolean needWriteArticle() { return true; }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class FECourse extends ACourse { private boolean needWriteArticleFlag = false; @Override void prepareContentMaterial() { System.out.println("提供课程的前端代码"); System.out.println("提供课程的图片等多媒体素材"); }
public FECourse(boolean needWriteArticleFlag) { this.needWriteArticleFlag = needWriteArticleFlag; }
@Override protected boolean needWriteArticle() { return this.needWriteArticleFlag; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Test { public static void main(String[] args) { System.out.println("后端设计模式课程start---"); ACourse designPatternCourse = new BackEndCourse(); designPatternCourse.makeCourse(); System.out.println("后端设计模式课程end---");
System.out.println("前端课程start---"); ACourse feCourse = new FECourse(false); feCourse.makeCourse(); System.out.println("前端课程end---"); } }
|
输出:
后端设计模式课程start—
制作PPT
制作视频
编写课堂笔记
提供课程Java源代码
后端设计模式课程end—
前端课程start—
制作PPT
制作视频
提供课程的前端代码
提供课程的图片等多媒体素材
前端课程end—