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

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

作者: 钉某人 | 来源:发表于2017-11-17 14:08 被阅读0次
源码地址 https://github.com/DingMouRen/DesignPattern
模板方法模式.png
  • AbsTemplate抽象类,定义一套算法框架
  • ComcreteImplA ComcreteImplB 具体实现类
定义

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

使用场景
  • 多个子类有公有的方法,并且逻辑基本相同时
  • 复杂的算饭,将核心算法设计为模板方法,周边的相关细节功能由各个子类实现
  • 重构时,经常使用模板方法模式,将相同的代码抽取到父类中,然后通过钩子约束其行为
举个栗子

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

//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();
    }
总结

优点:

  • 封装不变部分,扩展可变部分
  • 提取公共部分代码,便于维护
    缺点:会增加阅读代码的难度

相关文章

  • 设计模式(十四)-模板模式

    模板模式 模板方法模式子一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中.模板方法使得子类在不改变算法...

  • 模板模式

    模板模式 定义 模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不...

  • 看破设计模式之模板方法模式(Template Method)

    一、模板方法模式概述 模式定义: 在一个方法中定义一个算法的步骤,并将一些步骤的实现延迟到子类中。模板方法使得子类...

  • 模板模式 - 行为型

    一、模板模式的定义模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在...

  • 行为型设计模式详解之模板方法模式!深度解析模板方法模式的使用和实

    模板方法模式 模板方法模式: 使用一个抽象类定义算法模板结构,将某些具体算法步骤的实现延迟到子类中进行,使得子类在...

  • 大话设计模式之模板方法模式

    模板方法模式 模板方法模式: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的...

  • 设计模式-模板

    一,模板模式详解 概念模板方法通过定义一个算法骨架,而将算法中的步骤延迟到子类,这样子类就可以复写这些步骤的实现来...

  • Java 设计模式(9) —— 模板模式

    一、模板模式 封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现。模板模式可以使子类在不改变算法结构的情况...

  • 模板模式

    模板方法模式 概念:通过定义一个算法的骨架,而将算法中的步骤延迟到子类,这样子类就可以复写这些步骤的实现来实现特定...

  • 模板方法模式

    模板方法定义了算法的步骤,并允许子类为一个或多个步骤提供实现; 模板方法模式:在一个方法中定义一个算法的骨架,而将...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/mpkjvxtx.html