小胖想了想存貯器,兩者有什麼不同呢?要是不同的話,應該有介面卡吧!轉換一下不就行了嗎?
介面卡模式
解釋:
將乙個類的介面轉換成客戶希望的另外乙個介面。
adapter
模式使得原本由於介面不
相容而不能一起工作的那些類可以一起工作。——
gang of four
最通俗的說法就是變壓器,電是從發電廠傳過來的,你不可能直接使用,必須使用變壓器將電壓轉換成適當的電壓,這樣才能使用,否則你會變成焦炭!這個模式理解相對簡單,看類圖:
拿儲存器來舉例,現在最流行的儲存器都包含兩個方法,就是read()讀資料和wirte()寫資料,一般的u盤硬碟和多**裝置都包含這兩個方法,可以這樣說,在它們被生產出來之前,它們的藍圖是實現storage這個介面,然後實現storage裡的所有方法(read、write),這樣的儲存裝置可以應用在各個電腦上,不需要什麼介面卡,但是突然蘋果公司生產出來乙個特殊的儲存器mac,他們就是有「創新」,知道我們用的儲存器是什麼樣子的,但就是不按套路走,偏偏生產包含pull和push方法的儲存器,雖說是這樣,但是買的人還是特別多,有句話說的好「只買最貴不買最好!」
蘋果公司不可能讓你買來用不了啊,所以隨機生產了相應的介面卡adapter,你只有買了這個介面卡才能使用,嘿,又大賺了一筆!
這個adapter首先是繼承storage這個類,裡面理所當然的包含了兩個方法read()和write(),當然了,它也繼承了mac這個儲存器,這樣才能將讀寫方法一一對應,一一轉換,**實現為:
public inte***ce storage
public class flashdisk implements storage
@override
public void write()
}
public class mac
public void pull()
}
public class adapter extends mac implements storage
@override
public void write()
}
public class test
}
結果為:
我在讀資料
我在寫資料
我在拉資料
我在推送資料
這樣就是介面卡的面向類的介面卡,繼承了源類,並實現了目標介面,也就是一對一的寫法,還有一種物件導向的介面卡,看圖:
這裡需要注意adapter和mac,此時是關聯關係,並不是繼承的關係了
相應的**為:
public class adapter implements storage
@override
public void read()
@override
public void write()
}
public class test
}
結果和上面是一樣的!
物件介面卡模式的效果
1)乙個介面卡可以把多種不同的源適配到同乙個目標,換言之,同乙個介面卡可以把源類和它的子類都適配到目標介面。
2)與類的介面卡模式相比,要想置換源類的方法就不容易。如果一定要置換掉源類的乙個或多個方法,就只好先做乙個源
類的子類,將源類的方法置換掉,然後再把原來的子類當做真正的源進行適配。
3)雖然要想置換源類的方法不容易,但是要想增加一些新的方法則方便的很,而且新增加的方法可同時適用於所有的源。
可見,物件介面卡較類介面卡更靈活,建議使用!
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式之 介面卡模式
1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...
設計模式之介面卡模式
介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...