使用場景和原則:
當系統的資料和行為都正確,但介面不符合時,我們應該考慮用介面卡。介面卡主要應用於希望復用現存的類,但是介面又與復用環境要求的不一致。就是說,兩個類所做的事相同或者相似,但是具有不同的介面,這也是一種迫於無奈,雙發都不太容易修
改的時候。一般情況下,盡可能的前期不考慮介面卡,當然了,如果像對接類似第三方元件之類的,沒必要為了它改變自己的介面,那就可以考慮。像我們的 ado.net裡面的 dataadapter。
案例分析:
姚明去nba打球,剛到nba語言不通,這個時候姚明有沒有必要迅速學外語呢,答案肯定是否定的。那姚明要怎麼跟人溝通?答案是:請乙個翻譯。照著這個思路,我們畫一下類圖。
首先,球員的基本動作是attack和defense,球員擁有名字。
public球員分為三種,前鋒,中鋒,後衛。abstract
class
球員
public
abstract
void
attack();
public
abstract
void
defense();
}
public這個時候來了乙個外籍中鋒,他擁有的屬性和行為都球員基類不一樣。class
前鋒 : 球員
public
override
void
attack()
發起進攻啦
", name);
}public
override
void
defense()
立刻防守~
", name);}}
public
class
中鋒 : 球員
public
override
void
attack()
發起進攻啦
", name);
}public
override
void
defense()
立刻防守~
", name);}}
public
class
後衛 : 球員
public
override
void
attack()
發起進攻啦
", name);
}public
override
void
defense()
立刻防守~
", name);}}
public這個時候,翻譯官就可以出來工作了。class
外籍中鋒
public
void
進攻()
進攻", name);
}public
void
防守()
防守", name);}}
public最後,如何呼叫class
翻譯官:球員
public
override
void
attack()
public
override
void
defense()
}
球員 a=new 前鋒("案例總結:我覺得介面卡是一種後期彌補的模式,不能盲目的用。前鋒_巴蒂爾");
a.attack();
//教練直接給翻譯官下命令
球員 b = new 翻譯官("
中鋒_姚明");
b.attack();
b.defense();
console.read();
姚明去nba打球,不需要立刻學會外語,教練通過下命令給翻譯官,翻譯官轉達給姚明,姚明執行命令。其實,這樣的做法,必須依賴翻譯官,最好方式就是姚明自己會外語,所以,介面卡模式不能亂用,就像著名的扁鵲三兄弟的故事,如果前期設計好一點,事前能控制,而不是事後,經常改動。
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式 介面卡模式
01 02 author rollen holt 設計模式之 介面卡模式 03 04 05 inte ce window 11 12 abstract class windowadapter 16 public void close 19 public void activated 22 publi...