内容简介:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类不改变算法结构即可冲定义该算法的某些特定步骤。也许看定义有些懵逼,但是模板方法模式在设计模式中算是简单的了,仅仅使用了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类型。
模板方法模式的优点
- 封装不变部分,扩展可变部分:把认为不变部分的算法封装到父类实现,而可变部分的则可以通过继承来继续扩展。
- 提取公共部分代码,便于维护:如果不将公共部分抽取到父类中,任由散乱分布,最后维护将会造成很大的困扰。
- 行为由父类控制,子类实现:基本方法由子类实现,因此子类可以通过扩展的方式增加相应的功能。
参考
以上所述就是小编给大家介绍的《设计模式——模板方法模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python基础教程
[挪] Magnus Lie Hetland / 袁国忠 / 人民邮电出版 / 2018-2-1 / CNY 99.00
本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句;然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器;此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、发布等知识;最后,作者结合......一起来看看 《Python基础教程》 这本书的介绍吧!