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

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

内容简介:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类不改变算法结构即可冲定义该算法的某些特定步骤。也许看定义有些懵逼,但是模板方法模式在设计模式中算是简单的了,仅仅使用了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类型。

模板方法模式的优点

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

参考


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

查看所有标签

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

惡血

惡血

[美] 约翰·凯瑞鲁 / 林锦慧 / 商業周刊 / 2018-9-20 / NT$430

--新創神話!?揭露3000億獨創醫療科技的超完美騙局-- 她被譽為女版賈伯斯、《富比世》全球最年輕的創業女富豪, 如何用「一滴血」顛覆血液檢測、翻轉醫療產業? 一項即將改變你我健康的醫療檢測新科技, 而它的技術來自--謊言! ◎即將改編成電影,由奧斯卡影后珍妮佛‧勞倫斯(Jennifer Lawrence)主演 ◎榮登《紐約時報》、《出版人週刊》暢銷榜 ......一起来看看 《惡血》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具