設計模式(九) 介面卡模式

2021-09-12 04:32:51 字數 1598 閱讀 4741

介面卡模式

介面卡模式,不想講概念,假設個情景:

公司現在要開發乙個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 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...