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

  • 相关阅读:
    模仿商品分类点击效果
    Element MenuNav刷新后点击菜单保留选中状态
    element后端管理布局
    Element NavMenu动态生成导航菜单
    谁的速度快!谁背锅(技术解析)
    “非科班自学”复盘两个月时间在年底成功拿下了字节、阿里offer,入职了字节!
    用了这么久,你真的明白 HttpClient的实现原理了吗?
    求你了,不要再在对外接口中使用枚举类型了
    Docker 实战总结(非常全面),收藏了!
    Service层和Dao层真的有必要每个类都加上接口吗?
  • 原文地址:https://www.cnblogs.com/lihw-study/p/15201221.html
Copyright © 2011-2022 走看看