模板方法模式(由子类决定如何实现一个算法中的步骤)

2017-11-17  本文已影响0人  钉某人
源码地址 https://github.com/DingMouRen/DesignPattern
模板方法模式.png
定义

模板方法模式定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法结构,子类可以重写算法中某些特定步骤。

使用场景
举个栗子

我们都会登录计算机,登录计算机基本都是相同的步骤。但是不同的计算机,可能启动时开启的具体软件是不同的,

//Template模板类
public abstract class AbstractComputer {
    //启动计算机固定步骤:开启电源、硬件检查、加载系统、用户登录,用final休息,不让子类修改
    public final void startUp(){
        powerOn();
        checkHardware();
        loadOS();
        login();
        hook();//钩子
        System.out.println("登录后。。。。。。,然后就关机了");
    }

    private void powerOn() {
        System.out.println("开启电源");
    }

    //检查硬件
    protected abstract void checkHardware();

    //加载系统
    protected abstract void loadOS();

    //用户登录
    protected abstract void login();

    /**
     * 钩子:默认不做事的方法,子类根据情况决定要不要覆盖。
     * 例子:假如算法模板中有一个方法需要在一个条件允许下才能执行,这里hook()返回boolean值,这里hook()方法的实现就是去检验
     * 条件是否允许
     */
    protected  void hook(){
        
    }
}
//子类来实现算法中的某些步骤
public class CoderComputer extends AbstractComputer {
    @Override
    protected void checkHardware() {
        System.out.println(getClass().getSimpleName()+"检查硬件");
    }

    @Override
    protected void loadOS() {
        System.out.println(getClass().getSimpleName()+"加载linux系统");
    }

    @Override
    protected void login() {
        System.out.println(getClass().getSimpleName()+"进行用户和密码验证");
    }
}

使用

 public static void main(String[] args) {
        AbstractComputer computer = new CoderComputer();
        computer.startUp();

        computer = new MilitaryComputer();
        computer.startUp();
    }
总结

优点:

上一篇 下一篇

猜你喜欢

热点阅读