dw⽹页设计模板代码_23种设计模式------模板⽅法模式(代码
逻辑更清晰+可扩展性)...
前⾔
我们在做⾯向对象程序设计过程中,常常会遇到这种情况:设计⼀个系统时知道了算法所需的关键步骤,并且明确了这些步骤的执⾏顺序,但某些步骤的具体实现仍然未知,或者说某些步骤的实现与具体的环境相关。当遇到这样的问题时,我总是显得⽆从着⼿,模板⽅法模式正是为了解决这样的⼀个问题⽽提出来的。
什么是模板⽅法模式:定义⼀个操作中的算法的框架,⽽将⼀些步骤延迟到⼦类中。使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。
由定义可知,模板⽅法模式 应该具有以下⼏个要素
基本⽅法
基本⽅法也叫做基本操作,是由⼦类实现的⽅法,并且在模板⽅法被调⽤。
模板⽅法
可以有⼀个或⼏个,⼀般是⼀个具体⽅法,也就是⼀个框架,实现对基本⽅法的调度,完成固定的逻辑。
注意: 为了防⽌恶意的操作,⼀般模板⽅法都加上final关键字,不允许被覆写。
抽象类:负责给出⼀个算法的轮廓和⾻架。它由⼀个模板⽅法和若⼲个基本⽅法构成。
具体⼦类:实现抽象类中所定义的抽象⽅法和钩⼦⽅法,它们是⼀个顶级逻辑的⼀个组成步骤。
实现
我们以⼀个⼈的⼀天⽣活为例,他的⼀天会经过起床、洗脸、刷⽛、上班这⼏个步骤,但是每个⼈上班⼯作内容都是不⼀样的,对于不同的⼈来说,其他⼏块都是⼀样的,那么我们是不是就可以定义⼀个模板,来实现这样的功能
先定义模板类 TemplateClass , 其中分别定义了 四个步骤 getUp() 、washFace() 、brushTeeth() 、working() ,其中 working() 是抽象⽅法。在 startMyOneDay() ⽅法中决定四个⽅法的执⾏顺序。
定义抽象类
网页模板编辑器在抽象类中定义了⼀个⼈⼀天的⽣活步骤,其中 getUp() 、washFace() 、brushTeeth() 、startMyOneDay() 这四个类都是 final 修饰的,⽬的是不允许被重写。
在定义抽象类以后,就要定义具体实现,MrWang(王先⽣) 和 MrLiu(刘先⽣),这两个类都各⾃实现了 working() ⽅法。
MrWang 类
MrLiu 类
MrWang(王先⽣) 的⼯作是整理⽂案,⽽ MrLiu(刘先⽣) 的⼯作是写代码,由于⼯作内容不同,他们需要分别实现 working() ⽅法,写各⾃的逻辑。
在测试代码中,我们分别实例化出 MrWang 和 MrLiu ,并调⽤他们的 startOneDay() 的⽅法,这个⽅法是我们在抽象类中定义的模板⽅法,在这个⽅法中,按顺序分别调⽤了 getUp() 、washFace() 、brushTeeth() 、startMyOneDay() 四个⽅法,其中前三个⽅法是不变的,只有最后⼀个是不同的
我们看看测试结果是什么样
我的⼀天开始了。。。。。。
开始起床。。。。。。
开始洗脸。。。。。。
开始刷⽛
我是刘先⽣,我的⼯作是写代码
=================================================
我的⼀天开始了。。。。。。
开始起床。。。。。。
开始洗脸。。。。。。
开始刷⽛
我是王先⽣,我的⼯作内容是整理⽂案
测试结果和我们预料的⼀样,前⾯三步骤都是⼀样,只有最后⼀步不同
总结
模板⽅法模式虽然不是很常见,但是却很实⽤,在有些特殊的地⽅,实⽤这个模式会起到意想不到的作⽤。⽐如:当我们遇到下⾯这些的场景是应该⾸先选择 模板⽅法模式
多个⼦类有公有的⽅法,并且逻辑基本相同时。
重要、复杂的算法,可以把核⼼算法设计为模板⽅法,周边的相关细节功能则由各个⼦类实现。
重构时,模板⽅法模式是⼀个经常使⽤的模式,把相同的代码抽取到⽗类中,然后通过钩⼦函数(见“模板⽅法模式的扩展”)约束其⾏为。
创作不易,转载请声明,如有疑问或建议,欢迎在屏幕下⽅的评论区留⾔。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论