1)概述
介面卡模式又稱為轉換器模式、變壓器模式、包裝模式。介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不一起匹配而無法一起工作的兩個類能夠一起工作。該模式主要通過乙個**adapter,在原來的類adaptee和客戶之間進行協調,從而達到相容的母的,其核心是解決一致性的問題。
相似情景:
1.家興今天去了深圳深圳灣附近的乙個籃球場上打球,和一批黑人一起打球,可是呢,家興雖然打球很厲害,但是英語一點都不行,沒法和黑人交流,人家黑人和他說「他打球很厲害」,他完全聽不懂,然後旁邊的球友說了意思,然後他讓球友也和黑人說」你也一樣」;這種情況,家興的球友就充當介面卡模式的乙個這樣的作用。
2.現在市場上主流手機分別是安卓和iphone手機,但是這兩種的手機的充電器都是不一樣,市場上生產一種介面,就是用安卓手機的資料線加乙個小小的介面就給iphone手機充電。
2)提出問題
我們是什麼情況下使用呢?
3)簡單說明使用場所
當我們需要使用這個類的時候或者是乙個物件的時候,但是卻不能使用,在短時間不能進行改造,於是我們就需要去適配它了。
介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況下。
同時,介面卡是既是類介面卡模式,同時也是物件介面卡模式
4)結構
target:目標抽象類,定義客戶要用的特定領域介面。
adaptee:適配者,需要適配介面。
adapter:介面卡,把源介面轉換成目標介面,分為類介面卡和物件介面卡。
5)介面卡模式xml圖
6)**展示
程式執行的結果://介面
public
inte***ce
target
//物件介面卡objectadapter
public
class
objectadapter
implements
target
@override
public
void
specrequest()
}//類介面卡classadapter
public
class
classadapter
extends
adaptee
implements
target
}//適配者adaptee
public
class
adaptee
}//客戶端client
public
class
client
}
類介面卡:黑人要說話了,哈哈哈
適配者:家興要說話了
物件介面卡:黑人要說話了,哈哈哈
適配者:家興要說話了
通過以上的結果
發現類介面卡和物件介面卡都能實現一樣的效果
類介面卡和物件介面卡的區別:
物件介面卡:使用組合,不僅可以適配某個類,還能適配某個該類的任何子類;只需要寫一些**,將工作委託給被介面卡進行,讓**變得更有彈性。
類介面卡:不需要重新實現我的整個被適配者,必要的時候可以通過繼承的方式覆蓋被適配者的行為;比物件介面卡更加有效率,只需要乙個類介面卡,不需要乙個介面卡和乙個類介面卡。
7)回歸真實
我們面對開發完成後出現的問題,會遇到這樣乙個問題,有些**存在列舉器介面中,但是呢我們希望在新的**中只使用迭代器。這是我們要面對這樣乙個問題,我們就要考慮過濾器。
iterator介面有這樣三個方法,hasnext,next,remove;而enumeration介面只有hasmoreelements,nextelement這兩個方法;通過觀察enumeration的兩個方法很容易對映到iterator介面中去,但是remove方法就沒有,該怎麼去處理這問題呢?下面通過**實現
public
class
enumerationiterator
implements
iterator
@override
public
boolean
hasnext()
@override
public object next()
@override
public
void
remove()
}
介面卡模式的理解
介面卡模式用於 系統的資料和行為都正確,但介面不符時,應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況,比如在需要對早期 復用一些功能等應用上很有實際價值。自己翻譯就是 已經有了乙個早期的抽象的介面或者...
設計模式中的介面卡模式
將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。比如 現在有個手機要充電,手機是5v的介面,我要用電源是220v的powera介面去充電,即呼叫power的方法charge 然而charge 只提供220v電源,而我們還有個5...
PHP的設計模式 介面卡模式
適用性 1 你想使用乙個已經存在的類,而它的介面不符合你的需求 2 你想建立乙個可以復用的類,該類可以與其他不相關的類或不可預見的類協同工作 3 你想使用乙個已經存在的子類,但是不可能對每乙個都進行子類化以匹配它們的介面。物件介面卡可以適配它的父類介面 僅限於物件介面卡 介面卡模式 inte ce ...