设计模式-模板方法模式
定义
Template Method Pattern
模板方法模式是指定义一个算法的骨架,并允许子类为其中一个或多个步骤提供实现。
模板方法使得子类在不改变算法结构的基础上,重新定义算法的某些步骤。
属于行为型设计模式。
代码示例
定义模板类
package com.black.design.pattern.template;
/**
* 模板方法模式:网课
* @author black
*
*/
public abstract class AbstractNetworkCourse {
protected final void createCourse() {
//1.发布预习资料
this.postPreResource();
//2.制作PPT
this.writePPT();
//3.在线直播
this.liveVedio();
//4.提交课件
this.postNote();
//5.提交源码
this.postSource();
//6.布置作业,如果有作业的话,检查作业
if(needHomeWork()) {
checkHomeWork();
}
}
//由子类实现
abstract void checkHomeWork();
protected void postPreResource() {
System.out.println("1.发放预习资料");
}
protected void writePPT() {
System.out.println("2.制作PPT");
}
protected void liveVedio() {
System.out.println("3.直播授课");
}
protected void postNote() {
System.out.println("4.上传课堂笔记");
}
protected void postSource() {
System.out.println("5.上传源码");
}
//默认false,子类可以重写此方法,进行扩展
protected boolean needHomeWork() {
return false;
}
}
子类实现
package com.black.design.pattern.template;
/**
* Java 课程
* @author black
*
*/
public class JavaCourse extends AbstractNetworkCourse {
@Override
void checkHomeWork() {
System.out.println("检查 Java 作业...");
}
@Override
protected boolean needHomeWork() {
return true;
}
}
重写父类方法
package com.black.design.pattern.template;
/**
* Python 课程
* @author black
*
*/
public class PythonCourse extends AbstractNetworkCourse {
@Override
void checkHomeWork() {
System.out.println("没有作业");
}
}
测试
package com.black.design.pattern.template;
/**
* 模板方法测试类
* @author black
*
*/
public class TemplateTest {
public static void main(String[] args) {
//Java 课程
System.out.println("==============准备 Java 课程==============");
AbstractNetworkCourse javaCourse = new JavaCourse();
javaCourse.createCourse();
//Python 课程
System.out.println("==============准备 Python 课程==============");
AbstractNetworkCourse pythonCourse = new PythonCourse();
pythonCourse.createCourse();
}
}
结果:
==============准备 Java 课程==============
1.发放预习资料
2.制作PPT
3.直播授课
4.上传课堂笔记
5.上传源码
6.检查 Java 作业...
==============准备 Python 课程==============
1.发放预习资料
2.制作PPT
3.直播授课
4.上传课堂笔记
5.上传源码