介面卡模式
介面卡模式,不想講概念,假設個情景:
公司現在要開發乙個erp系統,需要查詢公司所有員工的資訊,這個很好辦,很快開發完了;然後來了個需求,公司收購了一家公司,該公司的組織結構與本公司不同,他們有自己的erp系統,並且希望保留自己的erp系統,但是總公司管理人員可不想使用兩個erp系統,他習慣了用總公司的erp系統,所以,我們需要把子公司的erp系統整合到總公司的erp系統中,而總公司的erp系統介面不變化。問題是我們發現,兩個erp系統的用於儲存使用者資料的資料結構是不同的,同時大家可能會問,這兩個物件都不在乙個系統中,你如何使用呢?(簡單!rmi 已經幫我們做了這件事情,只要有介面,就可以把遠端的物件當成本地的物件使用)那下邊我們來看具體的**實現:
總公司獲取使用者資訊的介面
public inte***ce iuserinfo
實現:
public class userinfo implements iuserinfo
/*** 該方法從資料庫中查詢乙個人的**號碼.
* @see com.gy.designpattern.adapter.iuserinfo#getuserphone()
*/public string getuserphone()
}
要使用該方法,如下:
public class client
然後,這是子公司的獲取使用者資訊的介面
public inte***ce iouteruser
實現:
public class outeruser implements iouteruser
}
看到沒,子公司獲取的使用者資訊是儲存在乙個map中的,這樣我們就沒法使用總公司的getusername方法來返回使用者的基本資訊,但是我們有辦法,看下面:
public class outeruserinfo extends outeruser implements iuserinfo
/*** 從資料查詢使用者**.
* @see com.gy.designpattern.adapter.iuserinfo#getuserphone()
*/@override
public string getuserphone()
}
我們用乙個outeruserinfo 繼承自outeruser 然後強制其實現總公司的iuserinfo介面,這樣就類似我們把子公司的類偽裝成了總公司的 iuserinfo 介面,這樣就可以像原來一樣呼叫相同的介面獲取使用者資訊啦,看如下呼叫方式
public class client
}
通過介面卡,把outeruser 偽裝成我們系統中乙個iuserinfo 物件,這樣,我們的系統基本不用修改什麼程式設計師,所有的人員查詢、呼叫跟本地一樣樣的。可以看出介面卡模式主要就是用來整合這種不同結構,下面附上類圖,有助於理解:
設計模式(九) 介面卡模式
將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起的兩個類能夠在一起工作。介面卡模式是把乙個介面或類轉換成其他的介面或者類,從另一方面講,介面卡模式也是一種包裝模式,類圖如下 三個角色 target目標角色 該角色定義把其他類轉換成何種介面,也就是期望介面 adapte...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...