首先定義操作檔案的介面
public inte***ce logtofile
實現類:
public class logtofileimpl implements logtofile
@override
public void delete(string log)
@override
public string read()
}
客戶端使用
logtofile logtofile = new logtofileimpl();
logtofile.write("error");
string read = logtofile.read();
logtofile.delete("aaa");
這一版介面定義了讀檔案read、寫檔案write、從檔案刪除delete的方法
後來由於公司日誌系統公升級,新系統需要把日誌儲存到資料庫中(我們只是舉個例子生產中日誌收集不是這麼做的)
於是定義了新的互動介面api:實現資料庫資料的crud
public inte***ce logtodb
實現類:
public class logtodbimpl implements logtodb
@override
public void delete(string log)
@override
public void update(string log)
@override
public string query()
}
客戶端使用:
//新版本寫到資料庫,並提供增刪改查功能
logtodb logtodb = new logtodbimpl();
logtodb.add("aaa");
logtodb.update("aaa");
logtodb.delete("aaa");
string query = logtodb.query();
好的,到這裡為止我們有兩套日誌實現了,乙個是file的乙個是db的。
老系統使用file的沒問題,新系統使用db的api也沒問題,如果有使用者目前並不希望公升級log儲存到資料庫的版本,但是又想使用新版的提供了crud工能的介面去開發新功能(這樣的好處是以後想公升級db的實現,更換乙個實現類就可以了不用改**),如何實現呢?
者就用到了我們上面講的介面卡了,提供乙個介面卡類實現新的crud介面,但底層仍然用file版的實現類。可以順便用上我們之前講的簡單工廠模式,封裝logtodb 介面,後期如果專案想用資料庫儲存日誌,直接切換配置檔案就好了
public class logadapter implements logtodb
@override
public void delete(string log)
@override
public void update(string log)
@override
public string query()
}
簡單工廠:
public class logfactory
}
客戶端使用,使用了簡單工廠的**是最後三行,上面的**供參考
public static void main(string args)
我們上面舉的例子是新老介面的相容。
介面卡模式的有點可以解決介面的相容問題,但是相應的過多的使用和濫用介面卡模式會讓系統變得非常凌亂,一般的原則是能不用就不用。
介面卡模式本質:轉換匹配,復用功能
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...
介面卡模式 預設介面卡,類介面卡,物件介面卡
模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...