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