【JS設計模式】裝飾者模式

來源:互聯網
上載者:User

標籤:rac   func   不用   prot   code   sso   子類   產生   src   




裝飾者模式:在不必改變原類檔案和使用繼承的情況下,動態地擴充一個對象的功能。它是通過建立一個封裝對象,也就是裝飾來包裹真實的對象



裝飾模式的特點(1) 裝飾對象和真實對象有同樣的介面。這樣client對象就能以和真實對象同樣的方式和裝飾對象互動。
(2) 裝飾對象包括一個真實對象的引用(reference)
(3) 裝飾對象接受全部來自client的請求。

它把這些請求轉寄給真實的對象。
(4) 裝飾對象能夠在轉寄這些請求曾經或以後添加一些附加功能。這樣就確保了在執行時。不用改動給定對象的結構就能夠在外部添加附加的功能。在物件導向的設計中。一般是通過繼承來實現對給定類的功能擴充。
適用性下面情況使用Decorator模式
1. 須要擴充一個類的功能,或給一個類加入附加職責。
2. 須要動態給一個對象加入功能,這些功能能夠再動態撤銷。
3. 須要添加由一些準系統的排列組合而產生的很大量的功能。從而使繼承關係變的不現實。
4. 當不能採用產生子類的方法進行擴充時。一種情況是,可能有大量獨立的擴充,為支援每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。

還有一種情況可能是由於類定義被隱藏,或類定義不能用於產生子類。




  var Door = function() {      }      Door.prototype.open = function() {        alert("開啟門");      }      var Decorator = function(decorator) {        this.decorator = decorator;      }      Decorator.prototype.open = function() {        this.decorator.open();      }      var door = new Door();      var decorator = new Decorator(door);      decorator = new Decorator(decorator);      decorator.open();


【JS設計模式】裝飾者模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.