小李飞刀资源网 Design By www.iooab.com
一、定义
模板方法是基于继承的设计模式,可以很好的提高系统的扩展性。 java中的抽象父类、子类
模板方法有两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。
二、示例
Coffee or Tea
(1) 把水煮沸
(2) 用沸水浸泡茶叶
(3) 把茶水倒进杯子
(4) 加柠檬
/* 抽象父类:饮料 */ var Beverage = function(){}; // (1) 把水煮沸 Beverage.prototype.boilWater = function() { console.log("把水煮沸"); }; // (2) 沸水浸泡 Beverage.prototype.brew = function() { throw new Error("子类必须重写brew方法"); }; // (3) 倒进杯子 Beverage.prototype.pourInCup = function() { throw new Error("子类必须重写pourInCup方法"); }; // (4) 加调料 Beverage.prototype.addCondiments = function() { throw new Error("子类必须重写addCondiments方法"); }; /* 模板方法 */ Beverage.prototype.init = function() { this.boilWater(); this.brew(); this.pourInCup(); this.addCondiments(); } /* 实现子类 Coffee*/ var Coffee = function(){}; Coffee.prototype = new Beverage(); // 重写非公有方法 Coffee.prototype.brew = function() { console.log("用沸水冲泡咖啡"); }; Coffee.prototype.pourInCup = function() { console.log("把咖啡倒进杯子"); }; Coffee.prototype.addCondiments = function() { console.log("加牛奶"); }; var coffee = new Coffee(); coffee.init();
通过模板方法模式,在父类中封装了子类的算法框架。这些算法框架在正常状态下是适用大多数子类的,但也会出现“个性”子类。
如上述流程,加调料是可选的。
钩子方法可以解决这个问题,放置钩子是隔离变化的一种常见手段。
/* 添加钩子方法 */ Beverage.prototype.customerWantsCondiments = function() { return true; }; Beverage.prototype.init = function() { this.boilWater(); this.brew(); this.pourInCup(); if(this.customerWantsCondiments()) { this.addCondiments(); } } /* 实现子类 Tea*/ var Tea = function(){}; Tea.prototype = new Beverage(); // 重写非公有方法 Tea.prototype.brew = function() { console.log("用沸水冲泡茶"); }; Tea.prototype.pourInCup = function() { console.log("把茶倒进杯子"); }; Tea.prototype.addCondiments = function() { console.log("加牛奶"); }; Tea.prototype.customerWantsCondiments = function() { return window.confirm("需要添加调料吗?"); }; var tea = new Tea(); tea.init();
JavaScript没有提供真正的类式继承,继承是通过对象与对象之间的委托来实现的。
三、“好莱坞原则”:别调用我们,我们会调用你
典型使用场景:
(1)模板方法模式:使用该设计模式意味着子类放弃了对自己的控制权,而是改为父类通知子类。作为子类,只负责提供一些设计上的细节。
(2)观察者模式:发布者把消息推送给订阅者。
(3)回调函数:ajax异步请求,把需要执行的操作封装在回调函数里,当数据返回后,这个回调函数才被执行。
希望本文所述对大家学习javascript程序设计有所帮助。
小李飞刀资源网 Design By www.iooab.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
小李飞刀资源网 Design By www.iooab.com
暂无评论...
更新日志
2024年11月18日
2024年11月18日
- ABC唱片-鲍比达·新民乐《满江红》[APE+CUE]
- 许嵩.2014-不如吃茶去【海蝶】【WAV+CUE】
- 周笔畅.2024-HAVE.A.GOOD.NIGHT【SN.Music】【FLAC分轨】
- 周笔畅.2024-HAVE.A.NICE.DAY【SN.Music】【FLAC分轨】
- 证声音乐图书馆《真夏派对 x 迪斯可》[FLAC/分轨][380.78MB]
- 证声音乐图书馆《星空下 爵士钢琴》[320K/MP3][65.88MB]
- 证声音乐图书馆《星空下 爵士钢琴》[FLAC/分轨][283.95MB]
- 沙门怀一《竹山听雨HQ》头版限量[低速原抓WAV+CUE]
- 沙门怀一《于喁·壹HQ》头版限量编号[低速原抓WAV+CUE]
- 群星《魅音绝唱》黑胶CD【WAV】
- 腾格尔.2002-四十独白【风潮】【WAV+CUE】
- 陈明真.1992-到哪里找那么好的人【华星】【WAV+CUE】
- 黄凯芹.2012-廿五年3CD【环球】【WAV+CUE】
- 证声音乐图书馆《七夕 爵士情缘》[320K/MP3][64.8MB]
- 证声音乐图书馆《七夕 爵士情缘》[FLAC/分轨][327.79MB]