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

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

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

模板方法模式的优点

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

参考


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

查看所有标签

猜你喜欢:

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

JAVA核心技术卷2

JAVA核心技术卷2

Cay S. Horstmann、Gary Cornell / 陈昊鹏、王浩、姚建平 / 机械工业出版社 / 2008-12 / 118.00元

《JAVA核心技术卷2:高级特征》是Java技术权威指南,全面覆盖Java技术的高级主题,包括流与文件、XML、网络、数据库编程、高级Swing、高级 AWT、JavaBean构件、安全、分布式对象、脚本、编译与注解处理等,同时涉及本地化、国际化以及Java SE 6的内容。《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Jav......一起来看看 《JAVA核心技术卷2》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

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

正则表达式在线测试