設計模式之介面卡模式

2021-10-24 18:09:41 字數 3827 閱讀 7668

介面卡模式

定義

​    ​介面卡模式(adapter pattern)是指將乙個類的介面轉換成客戶期望的另乙個介面,使原本的介面不相容的類可以一起工作,屬於結構型設計模式。

適用場景

1、已經存在的類,它的方法和需求不匹配(方法結果相同或相似)的情況。 

2、介面卡模式不是軟體設計階段考慮的設計模式,是隨著軟體維護,由於不同產品、不同廠家造成功能類似而介面不相同情況下的解決方案。有點亡羊補牢的感覺。

例項

建立統一的返回結果類

public class resultmsgpublic int getcode()public void setcode(int code)public string getmsg()public void setmsg(string msg)public object getdata()public void setdata(object data)}
我們假設原來的系統的登入邏輯是singinservice

public class siginservice/*** 登入的方法* @param username* @param password* @return*/public resultmsg login(string username,string password)}
建立member類

public class memberpublic void setusername(string username)public string getpassword()public void setpassword(string password)public string getmid()public void setmid(string mid)public string getinfo()public void setinfo(string info)}
原來的邏輯**我們不動,新建立乙個類繼承

public class singinforthirdservice extends siginservicepublic resultmsg loginforwechat(string openid)public resultmsg loginfortoken(string token)public resultmsg loginfortelphone(string telphone,string code)public resultmsg loginforregist(string username,string password)}
客戶端測試**

public static void main(string args)
通過乙個簡單的適配,完成了**的相容​。當然我們的**還可以優化,很多人可能想到了策略模式,工廠模式​。我們下面來優化下

根據不同的登入方式,建立不同的adapter,首先建立loginadapter

public inte***ce loginadapter
分別實現不同的登入適配,qq登入loginforqqadapter

public class loginforqqadapter implements loginadapterpublic resultmsg login(string id, object adapter)}
同理,其他的登入也是一樣,我直接上**

public class loginforsinaadapter implements loginadapterpublic resultmsg login(string id, object adapter)}
public class loginforteladapter implements loginadapterpublic resultmsg login(string id, object adapter)}
public class loginfortokenadapter implements loginadapterpublic resultmsg login(string id, object adapter)}
public class loginforwechatadapter implements loginadapterpublic resultmsg login(string id, object adapter)}
然後建立第三方登入相容介面

public inte***ce ipassportforthird
實現相容類

public class passportforthirdadapter extends siginservice implements ipassportforthirdpublic resultmsg loginforwechat(string id)public resultmsg loginfortoken(string token)public resultmsg loginfortelphone(string telphone, string code)public resultmsg loginforregist(string username, string passport)private resultmsg processlogin(string key,class extends loginadapter> clazz)}catch (exception e)return null;}}
客戶端測試**

public class passporttest}
看下類圖

優點

1、能提高類的透明性和復用,現有的類復用但不需要改變。 

2、目標類和介面卡類解耦,提高程式的擴充套件性。 

3、在很多業務場景中符合開閉原則。

缺點

1、介面卡編寫過程需要全面考慮,可能會增加系統的複雜性。 

2、增加**閱讀難度,降低**可讀性,過多使用介面卡會使系統**變得凌亂。

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...

設計模式之 介面卡模式

1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...

設計模式之介面卡模式

介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...