设计模式-模板方法模式

设计模式-模板方法模式

定义

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.上传源码


本文来自博客园,作者:不安分的黑娃,转载请注明原文链接:https://www.cnblogs.com/lihw-study/p/15201221.html

原文地址:https://www.cnblogs.com/lihw-study/p/15201221.html