工作原理:
將乙個類的介面轉換成客戶希望的另外乙個介面,adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作
從使用者的角度看是看不到被適配者的,是解耦的
介面卡模式屬於結構型模式,主要分三類:類介面卡模式、物件介面卡模式、介面介面卡模式
假設我們現在有這麼乙個需求:需要給我們的手機充電,手機充電只能使用5v的電壓,但是我們家裡的插座卻是220v的電壓,也就是說手機無法直接使用220v的插座進行充電,那麼現在就需要乙個介面卡來進行5v電壓和220v電壓的轉換,這個介面卡就是我們平時所用的充電器。
類圖:**實現:
//被適配的類
public
class
voltage220v
}
//適配介面
public
inte***ce
ivoltage5v
//介面卡類
public
class
voltageadapter
extends
voltage220v
implements
ivoltage5v
}
//手機類
public
class
phone
else
if(ivoltage5v.
output5v()
>5)
}}
//客戶端
public
class
client
}
通過上面的例子,我們再來理解一下介面卡模式的工作原理,就非常清晰了;介面卡模式的工作原理是說將乙個類的介面轉換成客戶希望的另外乙個介面,代入上面的例子中,也就是說把已存在的220v這個類轉換成手機充電需要的5v介面了;另外,adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作;即指的是由於手機不能直接與220v的電壓一起工作,但是有了介面卡之後,就使得手機可以與220v電壓一起工作了(間接)
關於類介面卡:
類圖如下:
//介面卡類
public
class
voltageadapter
implements
ivoltage5v
@override
public
intoutput5v()
return dst;
}}
關於物件介面卡:
核心思路:當不需要全部實現介面提供的方法時,可先設計乙個抽象類實現介面,並為該介面中每個方法提供乙個預設實現(空方法),那麼該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求;適用於乙個介面不想使用其所有的方法的情況。
為什麼要使用介面卡介面呢?試想,如果我們的目標介面中有多個方法需要進行適配,那麼每乙個介面卡去實現這個目標介面的話都需要實現介面中的所有方法,但是這個介面卡類只需要針對某乙個方法進行適配,而每次都要實現所有方法,即使是空實現,也會使**變得非常冗餘,所以才需要介面卡介面;讓這個介面卡介面去實現目標介面所有方法(空實現),而具體的介面卡再去繼承介面卡介面,再針對需要的方法去重寫即可!
類圖如下:
**如下:
//被適配的類
public
class
voltage220v
}
//目標介面:可能是5v、9v、12v、24v
public
inte***ce
ivoltage
//介面卡抽象類,也可以直接說成是介面卡介面,是乙個萬能介面卡,可以實現多種電壓的轉換
//介面卡介面是乙個抽象類,實現了目標介面,並重寫了目標介面的所有方法,只是這些方法都是空實現
//只需要讓具體的介面卡去繼承這個介面卡介面,並對需要的方法進行重寫即可!
public
abstract
class
abstractadapter
implements
ivoltage
@override
public
intoutput9v()
@override
public
intoutput12v()
@override
public
intoutput24v()
}
//具體的介面卡類:實現5v-220v的轉換
public
class
adapter
extends
abstractadapter
@override
public
intoutput5v()
}
//手機類
public
class
phone
else
if(ivoltage.
output5v()
>5)
}}
//客戶端
public
class
client
}
關於介面卡模式在springmvc中的應用可以參考另一篇部落格: 設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式之 介面卡模式
1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...
設計模式之介面卡模式
介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...