09.Javascript設計模式之裝飾器模式—-Decorator

來源:互聯網
上載者:User

 

09.Javascript設計模式之裝飾器模式----Decorator

首先,我非常遺憾的要說一聲,我花了兩個小時整理的關於裝飾器模式的筆記,因為一個不可預期的故障,ADoc文檔上傳到伺服器後,檔案損壞了。
檔案毫無備份。難道是我的筆記中包含法律禁止的文字?絕對不會。算了,我還是重新整理一份吧,對此深表鬱悶。

引入正題,本文將以我這段時間對裝飾者模式的學習、理解為基礎,向大家介紹Javascript設計模式中的裝飾器模式。我的理解程度非常有限,因此文檔也不會描述的非常的周全,還請您做好心理準備。

裝飾器模式的概念

裝飾器模式動態地將職責附加到某對象上,讓該對象具備了其原本不具備的一些特性。其有別於類繼承,因為在功能擴充方面,裝飾器模式提供了比類繼承更有彈性的替代方案,而且完全不會影響到該對象在其他領域或模組中的應用。

有網友對裝飾器給出了這樣的總結,我覺得非常的好,所以摘錄了下來:

裝飾器涉及四個名詞 1、介面或者抽象基類2、被裝飾對象,也就是一個簡單的實現了1中提到的介面或者抽象基類的實作類別3、裝飾對象,就是去裝飾被裝飾對象的對象 4、繼承裝飾對象類的子類,也就是具體的裝飾器類了
裝飾器模式樣本第一個名詞
var IDecorator = new Interface("IDecorator",["sayHello"]);
第二個名詞
var DecoratorImpl = function(){};implements(DecoratorImpl,IDecorator);DecoratorImpl.prototype.sayHello = function(){    alert("Hello...");};
第三個名詞

真正的裝飾器就在這裡開始了,也是所有欲實現裝飾器的父類

var Decorator = function(decorator){    //聲明一個需要被裝飾的對象,參數從構造器中獲得    this.decorator = decorator;};implements(Decorator,IDecorator);//在基類裝飾器中只調用被裝飾對象的方法 Decorator.prototype.sayHello = function(){    //注意這裡的代碼    this.decorator.sayHello();};

再對這個裝飾器的基類說明一下,在每個裝飾器模式中,這個類的結構基本不變
或者說這上面是裝飾器第三類名詞中最小的類了,必須有以上定義的這些元素。

第四個名詞

真正的裝飾就看這裡了,Please pay attention!

var SimpleDecorator = function(decorator){    //調用父類的構造器    this.superClass.prototype.constructor.call(this,decorator);};//先進行類繼承inherits(SimpleDecorator,Decorator);//下面開始裝飾SimpleDecorator.prototype.sayHello = function(){    //在原來的方法中加入了sayChina方法    this.sayChina();    //調用父類的sayHello    this.superClass.prototype.sayHello.call(this);    //在原來的方法中加入sayWorld方法    this.sayWorld();};//定義這兩個後來添加的方法SimpleDecorator.prototype.sayChina = function(){    alert("China ,");};SimpleDecorator.prototype.sayWorld = function(){    alert("World!");};
大膽的開始測試
var TestDecorator = function(){    //不使用裝飾器    this.unUseDecorator = function(decorator){        decorator.sayHello();   //這裡列印:Hello    };    //使用裝飾器    this.useDecorator = function(decorator){        var simpleDecorator = new SimpleDecorator(decorator);        simpleDecorator.sayHello(); //這裡列印China,Hello World!    };};

不要驚訝,裝飾器就是這麼強悍,把原來不變的方法改變了。

總結

那我們就來談談他的使用情境吧:

1、裝飾器模式主要裝飾供外部調用的介面方法,如果一個介面方法只是提供給內部調用,則不能使用該模式。 2、裝飾器模式主要裝飾可能要改變的介面方法,如果類中的某種行為在將來可能發生變化,而你又懶得去改變 原來的類,那麼就可以考慮使用裝飾器模式了。

OK,就說到這裡了先,再續...

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.