6.模板方法

1.模板方法是定义系列的方法,包含一部分公共的方法和一部分特殊的方法还有一个总的模板方法去串联这些方法,使他成为完成一件事的完整步骤。特殊的方法可以在子类中去定制属于子类本身的实现。

2.下面的例子是以日常工作为例,平时工作分为四个步骤,第一步上班签到,第二步执行具体工作内容,第三步发送工作日报,第四步下班签退。对于公司所有员工来说,签到,发送日报,签退是每个员工都要做的固定内容,而具体的工作内容却是不同的。软件工程师需要编码,测试工程师需要执行用例,产品经理需要写需求文档。

3.

package com.java.dp.template;

/**
 * @Author lizhilong
 * @create 2019/12/5 14:09
 * @desc 定义抽象类,规定事件执行的具体步骤
 */
public abstract  class Work {

    /**
     * 模板方法,定义统一的模式,不允许子类去修改
     */
    final void workDay(){
        Signin();
        doWork();
        sendReport();
        Signout();
    }

    public void Signin(){
        System.out.println("早上统一签到");
    }

    public abstract void  doWork();

    public void sendReport(){
        System.out.println("发送当天工作日报");
    }

    public void  Signout(){
        System.out.println("下班统一签退");
    }
}
package com.java.dp.template;

/**
 * @Author lizhilong
 * @create 2019/12/5 14:18
 * @desc 软件工程师的实现
 */
public class SoftwareEngineer extends Work{
    @Override
    public void doWork() {
        System.out.println("编写代码,实现需求");
    }
}
package com.java.dp.template;

/**
 * @Author lizhilong
 * @create 2019/12/5 14:20
 * @desc 产品经理的实现
 */
public class ProductEngineer extends Work {
    @Override
    public void doWork() {
        System.out.println("分析需求,编写文档");
    }
}
package com.java.dp.template;

/**
 * @Author lizhilong
 * @create 2019/12/5 14:19
 * @desc 测试工程师的实现
 */
public class TestEngineer extends Work{
    @Override
    public void doWork() {
        System.out.println("执行用例,发现漏洞");
    }
}
package com.java.dp.template;

/**
 * @Author lizhilong
 * @create 2019/12/5 14:20
 * @desc
 */
public class TemaplateMain {

    public static void main(String[] args) {
        Work softEngineer = new SoftwareEngineer();
        softEngineer.workDay();

        System.out.println("----------------------------------------------");
        System.out.println("\n");

        Work testEngineer = new TestEngineer();
        testEngineer.workDay();

        System.out.println("----------------------------------------------");
        System.out.println("\n");
        Work productEngineer = new ProductEngineer();
        productEngineer.workDay();
    }
}
早上统一签到
编写代码,实现需求
发送当天工作日报
下班统一签退
----------------------------------------------


早上统一签到
执行用例,发现漏洞
发送当天工作日报
下班统一签退
----------------------------------------------


早上统一签到
分析需求,编写文档
发送当天工作日报
下班统一签退

 

posted @ 2019-12-05 15:09  脆皮香蕉  阅读(226)  评论(0编辑  收藏  举报