23种设计模式之模板方法模式

模板方法模式

模板方法模式主要是立足点方法,方法分为以下三种

  • 抽象方法:在抽象类中声明,由具体子类实现。
  • 具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。
  • 钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。
    依据实际情况对方法进行实现或者重写,或者不动。
    以网课业务流程为例
    网课业务,那么创建课程流程为:发布预习资料➡制作课件PPT➡在线直播➡提交课堂笔记➡提交源码➡布置作业➡检查作业。
    假设检查作业这一项不是必须的。
public class TemplateTest {
    public static void main(String[] args) {
        System.out.println("=========Java课程start=========");
        JavaCourse java = new JavaCourse();
        java.setNeedCheckHomework(true);
        java.createCourse();
        System.out.println("=========Python课程start=========");
        PythonCourse python = new PythonCourse();
        python.setNeedCheckHomework(false);
        python.createCourse();
    }
}

// 抽象课程
abstract class AbstractCourse {
    public final void createCourse() {
        //1、发布预习资料
        postPreResource();

        //2、制作课件
        createPPT();

        //3、在线直播
        liveVideo();

        //4、提交课堂笔记
        postNote();

        //5、提交源码
        postResource();

        //6、布置作业
        postHomework();

        //7、检查作业
        if (needCheckHomework()) {
            checkHomework();
        }
    }

    protected abstract void checkHomework();

    //钩子方法
    protected boolean needCheckHomework() {
        return false;
    }

    protected void postHomework() {
        System.out.println("布置作业");
    }

    protected void postNote() {
        System.out.println("提交课程笔记");
    }

    protected void postResource() {
        System.out.println("提交源码");
    }

    protected void liveVideo() {
        System.out.println("在线直播");
    }

    protected void createPPT() {
        System.out.println("制作课件");
    }

    protected void postPreResource() {
        System.out.println("发布预习资料");
    }
}

// Java课程
class JavaCourse extends AbstractCourse {
    private boolean needCheckHomework = false;
    public void setNeedCheckHomework(boolean needCheckHomework) {
        this.needCheckHomework = needCheckHomework;
    }
    @Override
    protected boolean needCheckHomework() {
        return this.needCheckHomework;
    }
    @Override
    protected void checkHomework() {
        System.out.println("检查Java作业");
    }
}

class PythonCourse extends AbstractCourse {
    private boolean needCheckHomework = false;
    public void setNeedCheckHomework(boolean needCheckHomework) {
        this.needCheckHomework = needCheckHomework;
    }
    @Override
    protected boolean needCheckHomework() {
        return this.needCheckHomework;
    }
    @Override
    protected void checkHomework() {
        System.out.println("检查Python作业");
    }
}

在这里插入图片描述

在 Servlet 中,每一个 Servlet 类都必须要实现 HttpServlet 接口。GenericServlet 是个通用的、不特定于任何协议的 Servlet,它实现了 Servlet 接口。而 HttpServlet 继承于 GenericServlet,为 Servlet 接口提供了处理 HTTP 协议的通用实现,所以我们定义 Servlet 时只需要继承 HttpServlet 即可。

参考资料:
1.http://c.biancheng.net/view/1376.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值