摘要:模版方法由抽象类声明并加以实现。抽象类中的模版方法正是通过实现类扩展的方法来完成业务逻辑。一般来说,抽象类中的模版方法是不易反生改变的部分,而抽象方法是容易反生变化的部分,因此通过增加实现类一般可以很容易实现功能的扩展,符合开闭原则。
模板方法模式
定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
模板方法模式是编程中经常用到的模式,其非常简单,AbstractClass叫抽象模板,其方法分为3类:
1.抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现。
2.模版方法:由抽象类声明并加以实现。一般来说,模版方法调用抽象方法来完成主要的逻辑功能,并且,模版方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写。
3.钩子方法:由抽象类声明并加以实现。但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。
实现类用来实现细节。抽象类中的模版方法正是通过实现类扩展的方法来完成业务逻辑。
模板方法模式优点1.容易扩展。一般来说,抽象类中的模版方法是不易反生改变的部分,而抽象方法是容易反生变化的部分,因此通过增加实现类一般可以很容易实现功能的扩展,符合开闭原则。
2.便于维护。对于模版方法模式来说,正是由于他们的主要逻辑相同,才使用了模版方法。
适用场景在多个子类拥有相同的方法,并且这些方法逻辑相同时,可以考虑使用模版方法模式。在程序的主框架相同,细节不同的场合下,也比较适合使用这种模式。
代码//模板方法 var DP = require("./DesignPattern.js"); var AbstractCheck = (function () { _check = function () { this.startup(); this.speeup(); this.checkspeed(); this.brake(); this.stop(); } return function AbstractCheck() { DP.Interface(this, ["startup", "speeup", "brake", "stop"]); this.checkspeed = function () { console.log("默认不检测速度"); }; this.check = _check; } })(); function Porsche911() { this.__proto__ = new AbstractCheck(); this.startup = function () { console.log("检测911启动"); }; this.speeup = function () { console.log("检测911加速"); }; this.brake = function () { console.log("检测911刹车"); //检测方法标准 console.log("911刹车合格"); }; this.stop = function () { console.log("检测911熄火"); } } function Porsche781() { this.__proto__ = new AbstractCheck(); this.startup = function () { console.log("检测781启动"); }; this.speeup = function () { console.log("检测781加速"); }; this.brake = function () { console.log("检测781刹车"); //检测方法标准 console.log("781刹车合格"); }; this.stop = function () { console.log("检测781熄火"); }; this.checkspeed = function () { console.log("检测781速度"); }; } var porsche911 = new Porsche911(); var porsche781 = new Porsche781(); porsche911.check(); porsche781.check();
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/79483.html
摘要:让一切变得更简单抽象化深入封装算法块,这便是设计模式当中的一种模式模板方法模式。定义模板方法模式在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中。 让一切变得更简单抽象化 深入封装算法块,这便是设计模式当中的一种模式:模板方法模式。 我们先来看看下面两个茶和咖啡配方showImg(https://segmentfault.com/img/bVV4kS?w=1248&h=...
摘要:面向对象三大特征继承性多态性封装性接口。第五阶段封装一个属于自己的框架框架封装基础事件流冒泡捕获事件对象事件框架选择框架。核心模块和对象全局对象,,,事件驱动,事件发射器加密解密,路径操作,序列化和反序列化文件流操作服务端与客户端。 第一阶段: HTML+CSS:HTML进阶、CSS进阶、div+css布局、HTML+css整站开发、 JavaScript基础:Js基础教程、js内置对...
摘要:面向对象三大特征继承性多态性封装性接口。第五阶段封装一个属于自己的框架框架封装基础事件流冒泡捕获事件对象事件框架选择框架。核心模块和对象全局对象,,,事件驱动,事件发射器加密解密,路径操作,序列化和反序列化文件流操作服务端与客户端。 第一阶段: HTML+CSS:HTML进阶、CSS进阶、div+css布局、HTML+css整站开发、 JavaScript基础:Js基础教程、js内置对...
摘要:本文首发于的技术博客实用至上,非经作者同意,请勿转载。如果你使用了,或类似的,那么,通过编译前后的代码相差就很大了,这会造成两个问题以为例把你的代码转成什么样你自己是无法控制的,这往往导致无法通过的审查。 本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。原文地址:https://segmentfault.com/a/1190000007030775如果您...
阅读 2829·2021-11-24 09:38
阅读 3475·2021-11-23 09:51
阅读 923·2021-09-09 11:52
阅读 4011·2021-08-11 11:18
阅读 1080·2019-08-30 14:05
阅读 3187·2019-08-30 11:23
阅读 1702·2019-08-29 17:02
阅读 1109·2019-08-26 13:49