模板模式总结篇java
在上一篇《设计模式之模板模式引导篇》中,咱们使用了泡咖啡和泡茶的平常小场景讲解了模板模式的原理。本篇,咱们就结合这个小案例,来对模板模式进行总结。算法
本文出自《凯哥学设计模式》系列教程。做者:凯哥Java(kaigejava)设计模式
凯哥我的博客:www.kaigejava.comide
一:模板模式定义(或内容)spa
在上一篇中,咱们知道泡茶和泡咖啡都须要五个步骤。这五个步骤,其实就是算法骨架。设计
在具体是泡咖啡仍是泡茶,是加牛奶仍是加柠檬的时候,把这两个具体步骤延迟到具体真的子类中来实现了。这样就能够在不修改泡茶或泡咖啡的算法结构下,实现特定步骤。orm
总结模板模式定义:教程
先定义一个操做中的算法骨架,而将算法的某一个或者某些步骤的具体实现延迟到了子类中来实现,使得子类能够在不修改当前算法的结构状况下,从新定义当前算法的某些特定步骤。博客
模板模式属于行为模式的一种it
二:角色
抽象的基类
实现某些具体步骤的子类
关键代码:公共的代码在基类中实现(如:烧水、倒入杯中、送个客人这三个步骤就在基类hotdrink中实现的)
其余步骤在具体子类中实现(如:是泡茶仍是泡咖啡粉就是在具体的子类中实现的)
三:使用场景
在软件设计中,有些功能很相似,只是在某些环节不一样而已。大多数环节都是相同的时候,可使用模板模式。
将通用的算法或者步骤抽取到抽象类中,在具体子类中实现具体特定的操做
四:优缺点
优势:
封装不变的部分,将不变的部分抽取出来;
扩展可变部分,将可变的设置抽象方法,让具体子类来实现。
抽取的公共代码,便于后期维护
行为有基类来控制,具体操做有子类实现。
缺点:
每个不一样的实现都须要有一个子类来实现,这样就会致使类的数量大大的增长,使得系统更加庞大。
须要注意的地方:
为了防止算法骨架被恶意的破坏或者恶意的操做,通常在使用模板模式的时候,模板方法都会加上final这个关键字来限制。