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