模板模式

一、作用

模板类形式化地定义一个算法框架,由它的子类来实现细节的处理。子类在实现细节时并不会改变算法步骤的执行次序

二、概念

鸿洋-模板模式

模板模式_第1张图片
UML

三、使用

1. 抽象类中定义一个方法workOneDay()构建算法框架

public abstract class Worker {
    private String name;

    public Worker(String name) {
        this.name = name;
    }

    /**
     * 用final修饰方法,表示方法不可被重写 记录一天的工作 (1)进公司 (2)打开电脑 (3)工作 (4)关闭电脑 (5)离开公司 方法(3)由子类实现,其余方法在超类中都已实现
     */
    public final void workOneDay() {
        System.out.println("----work start---");
        enterCompany();
        computerOn();
        work();
        computerOff();
        exitCompany();
        System.out.println("----work end---");
    }

    private void exitCompany() {
        System.out.println(name + "离开公司");

    }

    private void computerOff() {
        System.out.println(name + "关闭电脑");

    }

    protected abstract void work();

    private void computerOn() {
        System.out.println(name + "打开电脑");

    }

    private void enterCompany() {
        if (isNeedPrintDate()) {
            System.out.print(new Date().toLocaleString() + "-->");
        }
        System.out.println(name + "进入公司");
    }

    /**
     * 模板方法里可以可选的设置钩子(就是开关的意思把...)
     * 
     * @return
     */
    public boolean isNeedPrintDate() {
        return false;
    }

}

2. 钩子的设置(开关)

private void enterCompany() {
    if (isNeedPrintDate()) {
        System.out.println(new Date().toLocaleString() + "-->");
    }
    System.out.println(name + "进入公司");
}

/**
 * 模板方法里可以可选的设置钩子(就是开关的意思把...)
 * 
 * @return
 */
public boolean isNeedPrintDate() {
    return false;
}

设计模式(行为型)之模板方法模式(Template Method Pattern)

你可能感兴趣的:(模板模式)