深入理解JavaScript系列(29):設計模式之裝飾者模式詳解_第1頁
深入理解JavaScript系列(29):設計模式之裝飾者模式詳解_第2頁
深入理解JavaScript系列(29):設計模式之裝飾者模式詳解_第3頁
深入理解JavaScript系列(29):設計模式之裝飾者模式詳解_第4頁
深入理解JavaScript系列(29):設計模式之裝飾者模式詳解_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、深入理解javascript系列(29):設計 模式之裝飾者模式詳解這篇文章主要介紹了深入理解javascript系列(29): 設計模式之裝飾者模式詳解,裝飾者用用于包裝同接口的對 象,不僅允許你向方法添加行為,而且還可以將方法設置成 原始對象調用(例如裝飾者的構造函數),需要的朋友可以 參考下 介紹裝飾者提供比繼承更有彈性的替代方案。裝飾者用用 于包裝同接口的對象,不僅允許你向方法添加行為,而且 還可以將方法設置成原始對象調用(例如裝飾者的構造函 數)。裝飾者用于通過重載方法的形式添加新功能,該模式 可以在被裝飾者前面或者后面加上自己的行為以達到特定 的目的。正文那么裝飾者模式有什么好處呢

2、?前面說了,裝飾者是 一種實現繼承的替代方案。當腳本運行時,在子類中增加 行為會影響原有類所有的實例,而裝飾者卻不然。取而代 之的是它能給不同對象各自添加新行為。如下代碼所示: 代碼如下:/需要裝飾的類(函數)funct ionmacbook () this co st=function () returnlo 00;fun ctionmemory (macbook) this cost=function() returnmac book cost () +75;fu nctionblura ydrive (macb ook) this cost=funct ion() ret urrunac

3、book cost () +300;functi onlnsurance (macbook) this cost=function() returnmac book cost () +250;/用法varmymac book=newlns urance(newb luraydrive ( newmemory (n ewmacbook ();conso le. log (myma ebook cost ();下面是另一個實例,當我們在裝飾者對象上調用 perform task時,它不僅具有一些裝飾者的行為,同時也 調用了下層對象的pe rformtask函數。代碼如下:fun ctionconc

4、re teclass () this. perfo rmtask=func tion() this pretask();console 1 og(' doingso mething,);t his. posttas k();fu nctionabstr actdecorato r (decorated ) this. pe rformtask=f unction() decorated. performtask ();fun ctionconcre tedecorator class (decor ated) thi s. base二abst ractdecorat or;this b

5、 ase (decorat ed);decor ated. pretas k=function () console log(' prec ailing');;decorat ed. posttask =function() console log(' post-c ailing');varcon crete=newco ncreteclass ();vardec oratorl=new concretedec oratorclass(concrete);vardecora tor2=newcon eretedecora torclass(de coratorl

6、);decorator2 performtas k();再來一個徹底的例子:代碼如下:var tree=;t ree decorat e=function() console log(' makes urethetreew on' tfalt );tree g etdecorator =function (d eco) tree deco prot otype=this;returnnewtr ee deco;; tree redb alls=functi on() this decorate=f unction() this. redba 11s prototy pe. de

7、corate () ;/第 7 步: 先執行原型(這時候是ang el t)的decora te方法conso le. log(,put onsomeredba lls,) ;/第 8 步再輸 出red/將這2步作為redbal is的decorate方法;tree blueballs=function() this deco rate=functi on() this blueballs prototype. d ecorate() ;/第 1 步: 先執行原型的decorate方法,也就是tree, dec orate ()co nsole. log(,addblueball s'

8、) ;/第 2 步再輸出 blue/將這2步作為bluebal is的decorate方法;tree angel=func tion () th is. decorate =function() this. ang el. prototyp e. decorate() ;/第 4 步:先執 行原型(這時候是blue balls t)的dec orate方法co nsole. log(,anangelonth etop');/第 5 步再輸出 angel/將這2步作為ang el的decorate方法;tree =tree. getde corator (? bl ueballs,) ;/第 3 步: 將blueb alls對象賦給tre e,這時候父原型里的g etdecorator依然可用t ree=tree getdec ora to r ang el');/第 6 步:將 angel對象賦給t ree,這時候父原型的父原型里的getdec orator依然可用tree二tree getdecorato r (? redballs ');/第 9 步: 將r edballs對象賦給treetree, decorate() ;/第 10 步:執行 re dballs 對象的 de corate 方法總結裝

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論