继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。合理的利用继承关系,还是能对你的系统设计起到很好的作用的。而模板方法模式就是其中的一个使用范例。
GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。
可以看出来,模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的。使用模板方法使系统扩展性增强,最小化了变化对系统的影响。这一点,在下面的举例中可以很明显的看出来。
复制代码 代码如下:
<?php
/**
* 模板模式
*
* 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构可以定义该算法的某些特定步骤
*
*/
abstract class TemplateBase
{
public function Method1()
{
echo "abstract Method1<br/>";
}
public function Method2()
{
echo "abstract Method2<br/>";
}
public function Method3()
{
echo "abstract Method3<br/>";
}
public function doSomeThing()
{
$this->Method1();
$this->Method2();
$this->Method3();
}
}
class TemplateObject extends TemplateBase
{
}
class TemplateObject1 extends TemplateBase
{
public function Method3()
{
echo "TemplateObject1 Method3<br/>";
}
}
class TemplateObject2 extends TemplateBase
{
public function Method2()
{
echo "TemplateObject2 Method2<br/>";
}
}
// 实例化
$objTemplate = new TemplateObject();
$objTemplate1 = new TemplateObject1();
$objTemplate2 = new TemplateObject2();
$objTemplate->doSomeThing();
$objTemplate1->doSomeThing();
$objTemplate2->doSomeThing();
AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
根据上面对定义的分析,以及例子的说明,可以看出模板方法适用于以下情况:
一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。其实这可以说是一种好的编码习惯了。
控制子类扩展。模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。比如上面runBare()方法就只在runTest前面适用setUp方法。如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:一是在API中不体现出你的模板方法;二、将你的模板方法置为final就可以了。
可以看出,使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。这样你在实现子类的时候,根本不需要对业务流程有太多的了解。
相关推荐:
ChatGPT宕机恢复时间如何解决用户焦虑与技术背后的故事,ai人工智能写作火山
SEO表述:如何通过精准优化让你的内容脱颖而出,江阴网站建设怎么样啊
SEO走动:提升网站流量的关键一步,SEO数据监控宝宝推荐
SEO项目指的是什么,seo项目指的是什么意思 ,写个ai
中外链:打通全球流量的桥梁,提升网站排名与流量的双重保障,行业网站建设思路
优化公司:助力企业腾飞的秘密武器,微信营销推广价格多少
SEO优化排名:让您的网站在搜索引擎中脱颖而出,我ai 达瓦仓决
SEO职位:数字营销的核心,开启职业新高峰,汕尾网站建设推广厂商
seo需要什么能力,seo需要哪些技术 ,ai长条弯曲
文章去AI回归创作的本真之美
ChatGPT4网页空白:重新定义智能交互的未来,怎么登ai
文章生成AI:让写作轻松高效的神奇工具
为什么“搜狗不收录”会成为企业SEO的新挑战?,烤肉店的线下营销与推广
AI人工智能:改变未来的科技革命
SEO找出网站流量提升的终极策略,带你走向搜索引擎巅峰!,朝阳模板网站建设价格
SEO词的魔力:如何通过关键词优化打破流量瓶颈,免费网站建设高端
为什么网站要做seo,网站做seo的目的是什么 ,ai初选
亚马逊seo是什么公司的,“亚马逊” ,ai玩底特律
seo诊断什么意思,seo诊断a5 ,约瑟夫ai
SEO更多-让你的企业站点在搜索引擎中脱颖而出,如何结交seo大神
URL泄露:如何防止信息泄露带来的严重后果,抖音推广营销服务多少钱
互联网快照:记录数字时代的每个瞬间,全网seo怎么优化内容
SEO符合:提升网站排名的秘诀,助力企业赢在搜索引擎优化的赛道,优化没续费 网站没了
GPT-3.5免费吗?揭秘AI智能助手的未来与收费模式,ai 美美
AI文章比对技术:引领写作与内容审核的新革命,ai智能写作小说免费
SEO基础知识解析:如何提升网站排名,助力企业成长,毕节企业建设网站
seo网站编辑是做什么,seo网站编辑可在家兼职 ,ai慢直播
seo算是什么营销方式,seo是网络营销吗 ,ai318
SEO运维:提升网站排名的核心战略,邢台网站建设优化建站
seo线索收集是什么,seo线索收集是什么意思 ,ai生活ai童童
SEO需要什么语音,seo需要考虑什么 ,学生作业ai
怎么用AI写出高质量科普文章?揭秘新时代创作利器!
SEO合作:让你的网站在搜索引擎中脱颖而出,惠州抖音seo策划公司
什么是seo技术,什么是seo及seo的作用 ,AI倒放仓鼠
如何识别文章是否由AI撰写?揭开智能写作的秘密
GoogleSEO打满分自然流量会高吗?揭开SEO优化的真相,猪插画ai
为什么要seo 运营,为什么需要seo ,ai人物头盔
ChatGPT崩溃!用户反馈网页端无法访问,修复急需,ai院子
云推SEO:让您的网站在激烈竞争中脱颖而出,网站优化公司欢迎来电
优化原理:提升效率、创新突破的核心法则,印刷包装推广有哪里网站
如何查文章AI率?全面解析AI文章检测工具及技巧
seo逻辑是什么,seo思路 ,语音主播怎么ai写作业
seo系列什么意思,seo的分类 ,que n ai je
SEO要求:如何优化网站提升搜索引擎排名,助力企业获取更多流量,鹤山区网站运营推广
SEO优化大全:让你的网站排名轻松破局,精准引流更高效!,274357524ai
怎么用AI写文章:高效创作的秘诀
seo深度优化插件是什么,深度优化手机软件 ,ai的缩写
目前国内最好的AI人工智能软件:未来新篇章
SEO与SEM策略:提升网站流量与品牌曝光的双剑合璧,ai补图
URL站长的崛起:打造高效网站运营的秘密武器,网站建设费用计算依据