zoukankan      html  css  js  c++  java
  • 设计模式-模板方法模式

    设计模式-模板方法模式

    定义

    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

  • 相关阅读:
    C#演练—Windows应用程序—在windows窗体上动态创建上下文菜单
    C#演练—Windows应用程序—可视化继承
    C#演练—Windows应用程序—创建主从windows窗体
    小胖IT大讲堂之三 Hook实战(二) SQL Monitor山寨版
    小胖的2011总结之回忆篇
    Oracle安装示例数据库
    《领域驱动设计》读书笔记(一) 分离领域
    小胖IT大讲堂之一 .NET Reflector工具介绍
    10年前我不是小胖,也是个“诗人”
    忘记
  • 原文地址:https://www.cnblogs.com/lihw-study/p/15201221.html
Copyright © 2011-2022 走看看