鉅大LARGE | 點擊量:1272次 | 2020年02月12日
適配器模式和代理模式的區(qū)別
組成:
抽象角色:通過接口或抽象類聲明真實角色實現(xiàn)的業(yè)務(wù)方法。
代理角色:實現(xiàn)抽象角色,是真實角色的代理,通過真實角色的業(yè)務(wù)邏輯方法來實現(xiàn)抽象方法,并可以附加自己的操作。
真實角色:實現(xiàn)抽象角色,定義真實角色所要實現(xiàn)的業(yè)務(wù)邏輯,供代理角色調(diào)用。
即proxypattern,23種常用的面向?qū)ο筌浖脑O(shè)計模式之一。(設(shè)計模式的說法源自《設(shè)計模式》一書,原名《Designpatterns:ElementsofReusableObject-OrientedSoftware》。1995年出版,出版社:AddisonWeslyLongman.Inc。該書提出了23種基本設(shè)計模式,第一次將設(shè)計模式提升到理論高度,并將之規(guī)范化。)
代理模式的定義:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
(1)職責清晰
真實的角色就是實現(xiàn)實際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責的事務(wù),通過后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡潔清晰。
(2)代理對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了中介的作用和保護了目標對象的作用。
(3)高擴展性
適配器模式
在計算機編程中,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。
共有兩類適配器模式:
對象適配器模式
--在這種適配器模式中,適配器容納一個它包裹的類的實例。在這種情況下,適配器調(diào)用被包裹對象的物理實體。
類適配器模式
--這種適配器模式下,適配器繼承自已實現(xiàn)的類(一般多重繼承)。
使用的前提:
1.接口中規(guī)定了所有要實現(xiàn)的方法
2.但一個要實現(xiàn)此接口的具體類,只用到了其中的幾個方法,而其它的方法都是沒有用的。
實現(xiàn)方法
1.用一個抽象類實現(xiàn)已有的接口,并實現(xiàn)接口中所規(guī)定的所有方法,這些方法的實現(xiàn)可以都是平庸實現(xiàn)----空方法;但此類中的方法是具體的方法,而不是抽象方法,否則的話,在具體的子類中仍要實現(xiàn)所有的方法,這就失去了適配器本來的作用。
2.原本要實現(xiàn)接口的子類,只實現(xiàn)1中的抽象類即可,并在其內(nèi)部實現(xiàn)時,只對其感興趣的方法進行實現(xiàn)。
注意事項
1.充當適配器角色的類就是:實現(xiàn)已有接口的抽象類
2.為什么要用抽象類:
此類是不要被實例化的。而只充當適配器的角色,也就為其子類提供了一個共同的接口,但其子類又可以將精力只集中在其感興趣的地方。
模式解析
你想使用一個已經(jīng)存在的適配器模式,而他的接口不符合你的需求。你想創(chuàng)建一個可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類協(xié)同工作。你想使用一些已經(jīng)存在的子類,但是不可能對每一個都進行子類化已一匹配他們的接口,對象適配器可以適配他的父類接口。適配器如同一個常見的變壓器,也如同電腦的變壓器和插線板之間的電源連接線,他們雖然都是3相的,但是電腦后面的插孔卻不能直接插到插線板上。
適配器模式和代理模式的區(qū)別
一簡介
適配器模式:適配器模式(英語:adapterpattern)有時候也稱包裝樣式或者包裝。將一個類的接口轉(zhuǎn)接成用戶所期待的。一個適配使得因接口不兼容而不能在一起工作的類工作在一起,做法是將類別自己的接口包裹在一個已存在的類中。
代理模式:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
二困惑
設(shè)計模式總是通過增加層來進行解耦合,提高擴展性,但是如果我們沒法從在這個抽象維度中看出,這個層真正的抽象含義,那么我們很難搞懂一個模式真正的內(nèi)涵?我就有這個疑問,這兩個東東都是增加了一層,但是這一層有什么區(qū)別?
三理解
很明顯,適配器模式是因為新舊接口不一致導(dǎo)致出現(xiàn)了客戶端無法得到滿足的問題,但是,由于舊的接口是不能被完全重構(gòu)掉的,因為我們還想使用實現(xiàn)了這個接口的一些服務(wù)。那么為了使用以前實現(xiàn)舊接口的服務(wù),我們就應(yīng)該把新的接口轉(zhuǎn)換成舊接口;實現(xiàn)這個轉(zhuǎn)換的類就是抽象意義的轉(zhuǎn)換器。
就比如在java中早期的枚舉接口是EnumeraTIon而后定義的枚舉接口是Iterator;有很多舊的類實現(xiàn)了enumeraTIon接口暴露出了一些服務(wù),但是這些服務(wù)我們現(xiàn)在想通過傳入Iterator接口而不是EnumeraTIon接口來調(diào)用,這時就需要一個適配器,那么client就能用這個服務(wù)了(服務(wù)端只想用Iterator或者只知道這個接口)。
相比于適配器的應(yīng)用場景,代理就不一樣了,雖然代理也同樣是增加了一層,但是,代理提供的接口和原本的接口是一樣的,代理模式的作用是不把實現(xiàn)直接暴露給client,而是通過代理這個層,代理能夠做一些處理。
技術(shù)專區(qū)慕展上,世強帶來的SiC、GaN、三電平讓你的效率直達最high點如何利用二級輸出濾波器防止開關(guān)電源噪聲陶瓷垂直貼裝封裝(CVMp)的焊接注意事項及布局DC-DC轉(zhuǎn)換器的平均小信號數(shù)學(xué)建模及環(huán)路補償設(shè)計常用基準穩(wěn)壓電源產(chǎn)生辦法有哪些?