设计模式——模板方法模式

栏目: 后端 · 发布时间: 6年前

内容简介:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类不改变算法结构即可冲定义该算法的某些特定步骤。也许看定义有些懵逼,但是模板方法模式在设计模式中算是简单的了,仅仅使用了Java的继承机制。但是它的应用是非常广泛的。我们先举个简单的例子让大家对于模板方法模式有个直观的了解。

设计模式——模板方法模式

定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类不改变算法结构即可冲定义该算法的某些特定步骤。

模板方法模式介绍

也许看定义有些懵逼,但是模板方法模式在 设计模式 中算是简单的了,仅仅使用了 Java 的继承机制。但是它的应用是非常广泛的。我们先举个简单的例子让大家对于模板方法模式有个直观的了解。

设计模式——模板方法模式

里面有两个角色

  • 抽象模板角色:完成对于基本方法的封装,由子类实现。并有一个方法是模板方法对于基本方法的调用,完成固定的逻辑。
  • 具体模板角色:子类对于基本方法的完善,从而实现父类调用子类方法实现不同角色不同的内容。

例如我们定义个抽象的汽车类,里面有汽车启动、停止、喇叭三个操作。但是每个汽车的这三个操作都是不同的。但是向客户演示的时候都是同样操作启动、停止、按喇叭。所以这就是一个典型的模板方法模式。

abstract class AbstractCar{
    protected abstract void run();
    protected abstract void stop();
    protected abstract void alarm();

    public final void templateMethod(){
        run();
        stop();
        alarm();
    }
}

接下来定义两辆实际的汽车

class BmwCar extends AbstractCar{

    @Override
    protected void run() {
        System.out.println("宝马 跑");
    }

    @Override
    protected void stop() {
        System.out.println("宝马 停");

    }

    @Override
    protected void alarm() {
        System.out.println("宝马 喇叭叫");
    }
}


class HmCar extends AbstractCar{

    @Override
    protected void run() {
        System.out.println("悍马 跑");
    }

    @Override
    protected void stop() {
        System.out.println("悍马 停");
    }

    @Override
    protected void alarm() {
        System.out.println("悍马 喇叭叫");
    }
}

所以在调用的时候根据不同的车创建不同的角色即可

AbstractCar bmw = new BmwCar();
        bmw.templateMethod();
        AbstractCar hm = new HmCar();
        hm.templateMethod();

抽象模板中的基本方法尽量设计为protected类型,符合迪米特法则,不需要暴露的属性或者方法尽量设置为protected类型。

模板方法模式的优点

  • 封装不变部分,扩展可变部分:把认为不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展。
  • 提取公共部分代码,便于维护:如果不将公共部分抽取到父类中,任由散乱分布,最后维护将会造成很大的困扰。
  • 行为由父类控制,子类实现:基本方法由子类实现,因此子类可以通过扩展的方式增加相应的功能。

参考


以上所述就是小编给大家介绍的《设计模式——模板方法模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python基础教程

Python基础教程

[挪] Magnus Lie Hetland / 袁国忠 / 人民邮电出版 / 2018-2-1 / CNY 99.00

本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句;然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器;此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、发布等知识;最后,作者结合......一起来看看 《Python基础教程》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具