四個角色:目标抽象類角色(Target)、目标對象角色(Adapter)、源對象角色(Adaptee)、用戶端角色(Client)
目标抽象類角色(Target):定義需要實作的目标接口
目标對象角色(Adapter):調用另外一個源對象,并且轉換(适配)為需要的目标對象。
源對象角色(Adaptee):因為提供的功能不能滿足現狀,需要轉換的源對象。
用戶端角色(Client):調用目标對象,對源對象進行加工。
實作思路:首先取得需要轉換的源對象,然後通過Adapter對源對象進行加工得到目标對象。
類圖:
<a target="_blank" href="http://blog.51cto.com/attachment/201204/160758430.jpg"></a>
應用場景:在第三方類庫中有一個源對象可以實作判斷使用者是否屬于成人、是幾個字的名字,但是需要的功能是顯示使用者資訊,且不能更改第三方類庫。
分析:現在的系統中需要的是顯示使用者資訊的功能,在這裡我們通過擴充卡模式調用第三方的對象,在目标對象中顯示使用者資訊處理,并提供接口給用戶端。
下面我們在控制台程式去示範一下如何使用Adapter Pattern:
一、目标抽象類角色(Target)
//Target(目标抽象類角色)
interface ITarget
{
void ShowInfo();
}
二、目标對象角色(Adapter)
//Adapter(目标對象角色)
public class TargetInfoAdapter:ITarget
SourceInfo sinfo;
public TargetInfoAdapter(SourceInfo sourceinfo)
{
this.sinfo = sourceinfo;
}
public void ShowInfo()
Console.WriteLine(sinfo.Name + ":" + sinfo.Age + "歲 " + sinfo.IsAdult() + " " + sinfo.NumberOfName());
三、源對象角色(Adaptee)
//Adaptee(源對象角色)
public class SourceInfo
public string Name { get; set; }
public int Age { get; set; }
public string IsAdult()
return Age > 17 ? "成年" : "未成年";
public string NumberOfName()
return Name.Length.ToString() + "個字名!";
四、用戶端角色(Client)
//Client(用戶端角色)
class Program
static void Main(string[] args)
//取得源對象
SourceInfo sinfo = new SourceInfo() { Name="小明",Age=15 };
//通過擴充卡轉化源對象為目标對象。
ITarget target =new TargetInfoAdapter(sinfo);
target.ShowInfo();
Console.ReadLine();
本文轉自程興亮 51CTO部落格,原文連結:http://blog.51cto.com/chengxingliang/826968