C#設計模式之介面卡模式
前言
這就好比是一個轉接線一樣。能用原配儘量原配,實在不匹配再考慮用轉接線。
介面卡模式
英文:Adapter
what
將一個類的介面轉換成客戶希望的另外一個介面。使原本由於介面不相容而不能一起工作的那些類可以一起工作。、
現在有兩種介面卡型別:類介面卡模式和物件介面卡模式。
C#中不支援多重繼承,一個類只有一個父類,所以這裡主要講物件介面卡。
情景
姚明在國外打球,他和其他隊員都會打球,但是兩者卻說不一樣的語言,這時候,就要有個翻譯(介面卡)來幫助它們對接。(這裡,如果姚明很容易就學會英語,或者外國人很容易就學會中文,就不先考慮用翻譯)
我們們經常使用電腦轉介面,就是因為電腦插孔和顯示器不匹配,所以需要一個轉介面來將二者連線,這裡的轉接器就相當於介面卡。
應用
在軟體開發中,系統的資料和行為都正確,但介面不符,我們可以考慮用介面卡,目的是使控制範圍之外的一個原有物件與某個介面匹配。
介面卡模式主要應用於希望複用一些現存的類,但是介面又與複用環境要求不一致的情況。、
主要用與軟體開發後期或維護期。在介面不想通過時,首先不考慮介面卡,應該考慮重構統一介面。在雙方都不容易修改的時候再使用介面卡模式適配。
程式碼展示
球員類:
//球員抽象類
abstract class Player
{
protected string name;
public Player(string name)
{
this.name = name;
}
//進攻和防守的方法
public abstract void Attack();
public abstract void Defense();
}
具體衝鋒類:
//前鋒類
class Forwards:Player
{
public Forwards(string name): base(name)
{
}
public override void Attack()
{
Console.WriteLine("前鋒{0}進攻",name);
}
public override void Defense()
{
Console.WriteLine("前鋒{0}防守", name);
}
}
//中鋒類
class Center : Player
{
public Center (string name): base(name)
{
}
public override void Attack()
{
Console.WriteLine("中鋒{0}進攻", name);
}
public override void Defense()
{
Console.WriteLine("中鋒{0}防守", name);
}
}
//後衛類,同上↑
外籍中鋒類://不會說外文,需要翻譯(介面卡)
//外籍中鋒
class ForeignCenter
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public void 進攻() //外籍中鋒只懂得中文進攻
{
Console.WriteLine("外籍中鋒{0}進攻",name);
}
public void 防守()
{
Console.WriteLine("外籍中鋒{0}防守", name);
}
}
翻譯類:
class Translator:Player
{
private ForeignCenter yao = new ForeignCenter();
public Translator(string name)
: base(name)
{
yao.Name = name;
}
public override void Attack()
{
yao.進攻();
}
public override void Defense()
{
yao.防守();
}
客戶端程式碼:
class Program
{
static void Main(string[] args)
{
Player cat = new Forwards("凱蒂貓");
cat.Attack();
Player dog = new Translator("阿拉斯加");
dog.Attack(); //進攻
dog.Defense(); //防守
Console.Read();
}
}
效果圖:
後記
相對於之前兩個模式來說,這個的程式碼更好理解,而且作用也一目瞭然。
但是希望我們做專案時儘量不會用到這個模式,因為感覺它就是用來當補丁的~~
相關文章
- 設計模式之介面卡模式設計模式
- 設計模式之【介面卡模式】設計模式
- Java設計模式之介面卡設計模式Java設計模式
- PHP 設計模式之介面卡模式PHP設計模式
- Javascript 設計模式之介面卡模式JavaScript設計模式
- 設計者模式之介面卡模式模式
- Java設計模式之介面卡模式Java設計模式
- 設計模式系列之「介面卡模式」設計模式
- php模式設計之 介面卡模式PHP模式
- C#設計模式-介面卡模式(Adapter Pattern)C#設計模式APT
- 設計模式之介面卡設計模式
- 23種設計模式之介面卡模式設計模式
- python設計模式之介面卡模式Python設計模式
- Java設計模式之(八)——介面卡模式Java設計模式
- C#設計模式(7)——介面卡模式(Adapter Pattern)C#設計模式APT
- 設計模式(十)----結構型模式之介面卡模式設計模式
- 設計模式之介面卡模式(adapter pattern)設計模式APT
- 每天學點設計模式之---介面卡模式設計模式
- 6.java設計模式之介面卡模式Java設計模式
- JavaScript設計模式經典之介面卡模式JavaScript設計模式
- 設計模式----介面卡模式設計模式
- 設計模式-介面卡模式設計模式
- 設計模式:介面卡模式設計模式
- 【設計模式】介面卡模式設計模式
- C#設計模式之命令模式C#設計模式
- 設計模式--介面卡模式/代理模式設計模式
- 設計模式學習筆記之介面卡模式設計模式筆記
- JavaScript 設計模式 —— 介面卡模式JavaScript設計模式
- java設計模式-介面卡模式Java設計模式
- 設計模式(七)介面卡模式設計模式
- 設計模式(五):介面卡模式設計模式
- PHP設計模式_介面卡模式PHP設計模式
- 設計模式(十四):介面卡模式設計模式
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之狀態模式C#設計模式
- C#設計模式之享元模式C#設計模式
- C#設計模式之組合模式C#設計模式
- C#設計模式之迭代器模式C#設計模式