介面卡模式
定義
介面卡模式(adapter pattern)是指將乙個類的介面轉換成客戶期望的另乙個介面,使原本的介面不相容的類可以一起工作,屬於結構型設計模式。
適用場景
1、已經存在的類,它的方法和需求不匹配(方法結果相同或相似)的情況。
2、介面卡模式不是軟體設計階段考慮的設計模式,是隨著軟體維護,由於不同產品、不同廠家造成功能類似而介面不相同情況下的解決方案。有點亡羊補牢的感覺。
例項
建立統一的返回結果類
我們假設原來的系統的登入邏輯是singinservicepublic class resultmsg
public int getcode()
public void setcode(int code)
public string getmsg()
public void setmsg(string msg)
public object getdata()
public void setdata(object data)
}
建立member類public class siginservice
/**
* 登入的方法
* @param username
* @param password
* @return
*/
public resultmsg login(string username,string password)
}
原來的邏輯**我們不動,新建立乙個類繼承public class member
public 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 siginservice
public 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 loginadapter
public resultmsg login(string id, object adapter)
}
public class loginforsinaadapter implements loginadapter
public resultmsg login(string id, object adapter)
}
public class loginforteladapter implements loginadapter
public resultmsg login(string id, object adapter)
}
public class loginfortokenadapter implements loginadapter
public resultmsg login(string id, object adapter)
}
然後建立第三方登入相容介面public class loginforwechatadapter implements loginadapter
public resultmsg login(string id, object adapter)
}
public inte***ce ipassportforthird
實現相容類
客戶端測試**public class passportforthirdadapter extends siginservice implements ipassportforthird
public 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...