• 设计模式-模板方法模式


    设计模式-模板方法模式

    定义

    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

  • 相关阅读:
    第十八章 文件传输协议
    第十七章 DNS原理
    第三十六章 Linux常用性能检测的指令
    学习日报
    连接数据库综合实例
    异常处理动手动脑
    Css实例之信息提交
    JDBC编程
    将文本文件写入数据库并使用数据库读取
    Java学习
  • 原文地址:https://www.cnblogs.com/lihw-study/p/15201221.html
Copyright © 2020-2023  润新知