js裝飾設(shè)計(jì)模式學(xué)習(xí)心得
裝飾設(shè)計(jì)模式
每種設(shè)都有其獨(dú)特的應(yīng)用場景和解決問題的方式, 裝飾設(shè)計(jì)模式是動(dòng)態(tài)的為對(duì)象添加新的功能, 是一種用于代替繼承的技術(shù),無需通過繼承增加子類就能擴(kuò)展對(duì)象的新功能。使用對(duì)象的關(guān)聯(lián)關(guān)系代替繼承關(guān)系,更加靈活,同時(shí)避免類型體系的快速膨脹, 這種模式適合新添加的功能不足以用繼承為代價(jià)解決問題的情況時(shí)使用 - 殺雞焉用宰牛刀 ^_^
裝飾設(shè)計(jì)模式: 動(dòng)態(tài)地為一個(gè)對(duì)象添加一些額外的職責(zé),若要擴(kuò)展一個(gè)對(duì)象的功能,裝飾者提供了比繼承更有彈性的替代方案。
結(jié)構(gòu)圖:
接口
var Bicycle = new Interface('Bicycle', ['assemble', 'wash', 'repair', 'getPrice']);
對(duì)象類
var AcmeComfortCuiser = function(){ }; AcmeComfortCuiser.prototype = { assemble: function(){ }, wash: function(){ }, repair: function(){ }, getPrice: function(){ } }
裝飾類
var BicycleDecorator = function(bicycle){ Interface.ensureImplements(bicycle, Bicycle); this.bicycle = bicycle; }; BicycleDecorator.prototype = { assemble: function(){ return this.bicycle.assemble(); }, wash: function(){ return this.bicycle.wash(); }, repair: function(){ return this.bicycle.repair(); }, getPrice: function(){ return this.bicycle.getPrice(); } }
拓展類
var HeadlightDecorator = function(bicycle){ BicycleDecorator.call(this, bicycle); }; extend(HeadlightDecorator, BicycleDecorator); HeadlightDecorator.prototype.getPrice = function(){ return this.bicycle.getPrice() + 15.00; }
- JavaScript實(shí)現(xiàn)AOP詳解(面向切面編程,裝飾者模式)
- node.js實(shí)現(xiàn)的裝飾者模式示例
- JavaScript裝飾器函數(shù)(Decorator)實(shí)例詳解
- 利用策略模式與裝飾模式擴(kuò)展JavaScript表單驗(yàn)證功能
- Javascript設(shè)計(jì)模式之裝飾者模式詳解篇
- 輕松掌握J(rèn)avaScript裝飾者模式
- 學(xué)習(xí)JavaScript設(shè)計(jì)模式之裝飾者模式
- 深入理解JavaScript系列(29):設(shè)計(jì)模式之裝飾者模式詳解
- PHP、Python和Javascript的裝飾器模式對(duì)比
- JavaScript設(shè)計(jì)模式之裝飾者模式介紹
相關(guān)文章
使用JavaScript 實(shí)現(xiàn)各種跨域的方法
本篇文章是對(duì)在JavaScript中實(shí)現(xiàn)各種跨域方法的介紹。需要的朋友參考下2013-05-05淺談JavaScript中setInterval和setTimeout的使用問題
這篇文章主要介紹了淺談JavaScript中setInterval和setTimeout的使用問題,作者建議在任務(wù)龐大時(shí)盡量避免使用setInterval,需要的朋友可以參考下2015-08-08辨析JavaScript中的Undefined類型與null類型
Undefined與null都是js中的基本數(shù)據(jù)類型,然而正如它們的名字那樣,未初始化和空并不相同,下面我們就來詳細(xì)辨析JavaScript中的Undefined類型與null類型:2016-05-05THREE.JS入門教程(4)創(chuàng)建粒子系統(tǒng)
Three.js是一個(gè)偉大的開源WebGL庫,WebGL允許JavaScript操作GPU,在瀏覽器端實(shí)現(xiàn)真正意義的3D本文將介紹創(chuàng)建一個(gè)粒子系統(tǒng)/風(fēng)格/引入物理等等,感興趣的朋友可以了解下哦,希望本文對(duì)你有所幫助2013-01-01Knockout數(shù)組(observable)使用詳解示例
本文通過示例詳細(xì)說明了Knockout數(shù)組(observable)的使用方法,如從observableArray里讀取信息、操作observableArray2013-11-11如何獲取JQUERY AJAX返回的JSON結(jié)果集實(shí)現(xiàn)代碼
我寫了個(gè)方法,用于查詢結(jié)果,但debug過程中發(fā)現(xiàn)結(jié)果集有數(shù)據(jù),我如何通過變量獲取呢2012-12-12