">
裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。
23種設(shè)計模式之一,英文叫Decorator Pattern,又叫裝飾者模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象。
裝飾模式的特點
1) 裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互。
2) 裝飾對象包含一個真實對象的引用(reference)
3) 裝飾對象接受所有來自客戶端的請求。它把這些請求轉(zhuǎn)發(fā)給真實的對象。
4) 裝飾對象可以在轉(zhuǎn)發(fā)這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計中,通常是通過繼承來實現(xiàn)對給定類的功能擴展。
在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。
將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作?!狦ang of Four
基本概念
客戶:需要調(diào)用我們的代碼的對象。
Adapter模式的宗旨:保留現(xiàn)有類所提供的服務(wù),向客戶提供接口,以滿足客戶的期望。
主要內(nèi)容
(1)類適配器:
當客戶在接口中定義了他期望的行為時,我們就可以應(yīng)用適配器模式,提供一個實現(xiàn)該接口的類,并且擴展已有的類,通過創(chuàng)建子類來實現(xiàn)適配。
下面是類適配器的UML圖:
(2)對象適配器:對象適配器”通過組合除了滿足“用戶期待接口”還降低了代碼間的不良耦合。在工作中推薦使用“對象適配”。下面是對象適配器的UML圖:(3) 缺省適配器模式:缺省適配器模式是一種特殊的適配器模式,但這個適配器是由一個抽象類實現(xiàn)的,并且在抽象類中要實現(xiàn)目標接口中所規(guī)定的所有方法,但很多方法的實現(xiàn)都是“平庸”的實現(xiàn),也就是說,這些方法都是空方法。而具體的子類都要繼承此抽象類。
裝飾模式與適配器模式的的區(qū)別
裝飾模式和適配器模式都有一個別名叫包裝模式,但包裝的形式是不一樣的。
定義上:
裝飾模式:對客戶端透明的方式擴展對象的功能,是繼承關(guān)系的一個替代方案,提供比繼承更多的靈活性。使用原來被裝飾的類的一個子類的實例,把客戶端的調(diào)用委派到被裝飾類。
適配器模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據(jù)參數(shù)返還一個合適的實例給客戶端。
從定義上看裝飾模式是對核心對象或者功能的擴展,適配器模式是把對象或者功能放到一個新對象中引用。舉個例子,現(xiàn)在書城賣道德經(jīng)的書,有線裝版,有精裝版,有日文版,有英文版,其中線裝版和精裝版就是裝飾模式,日文版和英文版就是適配器模式,各種版本都是為迎合不同消費者的不同需求。為什么呢?因為線裝版和精裝版的道德經(jīng)雖然包裝不同,但內(nèi)容相同,日文版和英文版就不同,這兩個版本的內(nèi)容就可能和原版的不同,文化差異嘛,翻譯的內(nèi)容雖來自道德經(jīng),但根據(jù)不同國家的文化,思維邏輯什么的就可能改變一些想法。
使用條件:
裝飾模式一般在下列情況使用:需要擴展一個類的功能或者給你個類增加附加責(zé)任;需要動態(tài)的給一個對象增加功能,這些功能可以再動態(tài)的撤銷;需要增加有一些基本功能的排列組合而產(chǎn)生非常大量的功能,從而使得繼承關(guān)系變得不現(xiàn)實。
適配器模式一般使用的情況包括:系統(tǒng)需要使用現(xiàn)有的類,但此類已經(jīng)不符合系統(tǒng)的需要;
想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的的類一起工作。適配器模式在系統(tǒng)升級的時候使用的頻率很高,對舊系統(tǒng)的一些功能方法在新系統(tǒng)中引用。
Java中的應(yīng)用:
裝飾模式和適配器模式在java中的I/O文件的操作中都有體現(xiàn)。
Java的IO庫中處理流的類有FIleInputStream,F(xiàn)ileOutputStream,DataInputStream,DataOutputStream類等。在InputStream,OutputStream,Reader,Writer結(jié)構(gòu)的內(nèi)部,有一些流處理器可以對另一些流處理器起到裝飾作用,形成新的,改善的流處理器。這就體現(xiàn)了裝飾模式的作用。同時在一些流處理器的內(nèi)部有對其他流處理器的功能的適配引用,這體現(xiàn)了適配器模式的優(yōu)點。
模式概念的出現(xiàn),完善到合理應(yīng)用是前輩們在實際的應(yīng)用中不斷總結(jié)的結(jié)晶。對于不同的需求合理的使用模式能起到事半功倍的效果,但是模式不是放之四海而皆準的,況且模式也不是一成不變死板的,隨著技術(shù)的發(fā)展,工程師的智慧總結(jié),可能會有新的模式出現(xiàn)和舊的模式的消亡,模式就是為實際需要而生,沒必要上升到哲學(xué)這種高度。
上海紫卓電子科技有限公司
地址:上海市嘉定工業(yè)區(qū)葉城路925號B區(qū)4幢J
網(wǎng)址:fashioncenter.cn
電話:021-31007998
傳真:021-31007998
郵件:569998567@qq.com
在線咨詢:
569998567
致力成為優(yōu)秀的IC供應(yīng)配單專家及IC代理商
竭力為客戶提供一站式電子元器件采購及IC配套服務(wù)
上海紫卓電子科技有限公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像
CopyRight 2020-2025 fashioncenter.cn All rights reserved