介面卡模式 設計模式學習

2021-09-06 08:39:42 字數 2155 閱讀 4543

介面卡模式(adapter),將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

在軟體開發中,系統的資料行為都正確,但介面不符,我們應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況。

下面給出介面卡模式的uml圖:

下面來看下介面卡模式的**結構圖:

namespace

}//adaptee需要適配的類

class

adaptee

}//adapter(通過在內部包裝乙個adapee物件,把源介面轉換成目標介面)

class

adapter : target

}class

program

} }

使用乙個已經存在的類,但如果它的介面,也就是它的方法和你所要求不相同時,就應該考慮介面卡模式。但是介面卡模式多少有點亡羊補牢的感覺,因此應該在系統設計之初就規範好介面。

下面回到《大話設計模式》中的要命到nba打球的例子:

namespace

public

abstract

void

attack();

public

abstract

void

defense();

}//前鋒

class

forwards : player

public

override

void

attack()

進攻",name);

}public

override

void

defense()

防守",name);}}

//中鋒

class

center : player

public

override

void

attack()

進攻", name);

}public

override

void

defense()

防守", name);}}

//後衛

class

guards : player

public

override

void

attack()

進攻", name);

}public

override

void

defense()

防守", name);}}

//外籍中鋒

class

foreigncenter

set

}public

void 進攻() //

注意 外籍中鋒的語言不通,因此通過規範的抽象類player的attack()方法無法呼叫進攻"

, name);

}public

void

防守()

防守", name);}}

//翻譯者類

class

translator : player

public

override

void attack() //

呼叫翻譯者的attack()就相當於呼叫了 外籍中鋒的進攻,而翻譯者類是繼承自player,因此相容抽象

public

override

void

defense()

}class

program

} }

輸出結果如下所示:

介面卡模式在.net中的應用,dataadapter用作dataset和資料來源之間的介面卡以便檢索和儲存資料。dataadapter通過對映fill(這更改了dataset中的資料以便於資料來源中的資料相匹配)和update(這更改了資料來源中的資料以便於dataset中的資料相匹配)來提供這一介面卡。

設計模式學習 介面卡模式

建立型模式學習完了,接下來學習的是結構性模式。結構型模式主要涉及到如何組合類和物件以獲得更大的結構,通常採用繼承機制來組合介面和實現。首先學習的是介面卡模式。首先是介面卡的定義 介面卡模式,將乙個類的介面轉換成客戶所希望的另外乙個介面。介面卡模式使得原來由於介面不相容而不能一起工作的類可以一起工作。...

設計模式學習 介面卡模式

介面卡在我們的生活中應用的十分廣泛,比如我們的筆記本電源,如果不用介面卡,那我們的筆記本將直接接入220v的交流電,出國的朋友肯定對三個插孔的轉換頭比較熟悉,這也是一種介面卡。顧名思義,介面卡模式 有時候也稱包裝樣式或者包裝 將乙個類的介面適配成使用者所期待的。乙個適配允許通常因為介面不相容而不能在...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...