鉅大LARGE | 點擊量:1160次 | 2020年02月12日
適配器模式和裝飾模式的區別
裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
23種設計模式之一,英文叫Decoratorpattern,又叫裝飾者模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
裝飾模式的特點
(1)裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互。
(2)裝飾對象包含一個真實對象的引用(reference)
(3)裝飾對象接受所有來自客戶端的請求。它把這些請求轉發給真實的對象。
(4)裝飾對象可以在轉發這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現對給定類的功能擴展。
適配器模式
在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。GangofFour
基本概念
客戶:需要調用我們的代碼的對象。
Adapter模式的宗旨:保留現有類所提供的服務,向客戶提供接口,以滿足客戶的期望。
主要內容
(1)類適配器:
當客戶在接口中定義了他期望的行為時,我們就可以應用適配器模式,提供一個實現該接口的類,并且擴展已有的類,通過創建子類來實現適配。
下面是類適配器的UML圖:
(2)對象適配器:對象適配器通過組合除了滿足用戶期待接口還降低了代碼間的不良耦合。在工作中推薦使用對象適配。下面是對象適配器的UML圖:(3)缺省適配器模式:缺省適配器模式是一種特殊的適配器模式,但這個適配器是由一個抽象類實現的,并且在抽象類中要實現目標接口中所規定的所有方法,但很多方法的實現都是平庸的實現,也就是說,這些方法都是空方法。而具體的子類都要繼承此抽象類。
裝飾模式與適配器模式的的區別
裝飾模式和適配器模式都有一個別名叫包裝模式,但包裝的形式是不一樣的。
定義上:
裝飾模式:對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案,提供比繼承更多的靈活性。使用原來被裝飾的類的一個子類的實例,把客戶端的調用委派到被裝飾類。
適配器模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據參數返還一個合適的實例給客戶端。
從定義上看裝飾模式是對核心對象或者功能的擴展,適配器模式是把對象或者功能放到一個新對象中引用。舉個例子,現在書城賣道德經的書,有線裝版,有精裝版,有日文版,有英文版,其中線裝版和精裝版就是裝飾模式,日文版和英文版就是適配器模式,各種版本都是為迎合不同消費者的不同需求。為什么呢?因為線裝版和精裝版的道德經雖然包裝不同,但內容相同,日文版和英文版就不同,這兩個版本的內容就可能和原版的不同,文化差異嘛,翻譯的內容雖來自道德經,但根據不同國家的文化,思維邏輯什么的就可能改變一些想法。
使用條件:
裝飾模式一般在下列情況使用:需要擴展一個類的功能或者給你個類增加附加責任;需要動態的給一個對象增加功能,這些功能可以再動態的撤銷;需要增加有一些基本功能的排列組合而產生非常大量的功能,從而使得繼承關系變得不現實。
適配器模式一般使用的情況包括:系統需要使用現有的類,但此類已經不符合系統的需要;
想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的的類一起工作。適配器模式在系統升級的時候使用的頻率很高,對舊系統的一些功能方法在新系統中引用。
Java中的應用:
裝飾模式和適配器模式在java中的I/O文件的操作中都有體現。
Java的IO庫中處理流的類有FIleInputStream,FileOutputStream,DataInputStream,DataOutputStream類等。在InputStream,OutputStream,Reader,Writer結構的內部,有一些流處理器可以對另一些流處理器起到裝飾作用,形成新的,改善的流處理器。這就體現了裝飾模式的作用。同時在一些流處理器的內部有對其他流處理器的功能的適配引用,這體現了適配器模式的優點。
模式概念的出現,完善到合理應用是前輩們在實際的應用中不斷總結的結晶。對于不同的需求合理的使用模式能起到事半功倍的效果,但是模式不是放之四海而皆準的,況且模式也不是一成不變死板的,隨著技術的發展,工程師的智慧總結,可能會有新的模式出現和舊的模式的消亡,模式就是為實際需要而生,沒必要上升到哲學這種高度。
技術專區慕展上,世強帶來的SiC、GaN、三電平讓你的效率直達最high點如何利用二級輸出濾波器防止開關電源噪聲陶瓷垂直貼裝封裝(CVMp)的焊接注意事項及布局DC-DC轉換器的平均小信號數學建模及環路補償設計常用基準穩壓電源產生辦法有哪些?