四個角色:目標抽象類角色(Target)、目標對象角色(Adapter)、源對象角色(Adaptee)、客戶端角色(Client)
??????? 目標抽象類角色(Target):定義需要實現的目標接口
??????? 目標對象角色(Adapter):調用另外一個源對象,并且轉換(適配)為需要的目標對象。
??????? 源對象角色(Adaptee):因為提供的功能不能滿足現狀,需要轉換的源對象。
??????? 客戶端角色(Client):調用目標對象,對源對象進行加工。
???????? 實現思路:首先取得需要轉換的源對象,然后通過Adapter對源對象進行加工得到目標對象。
?類圖:
????????應用場景:在第三方類庫中有一個源對象可以實現判斷用戶是否屬于成人、是幾個字的名字,但是需要的功能是顯示用戶信息,且不能更改第三方類庫。
????????分析:現在的系統中需要的是顯示用戶信息的功能,在這里我們通過適配器模式調用第三方的對象,在目標對象中顯示用戶信息處理,并提供接口給客戶端。
??????? 下面我們在控制臺程序去演示一下如何使用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();
}
}
??????? 如需源碼請點擊?AdapterPattern.rar?下載。
本文轉自程興亮博客園博客,原文鏈接:http://www.cnblogs.com/chengxingliang/archive/2011/09/15/2173195.html,如需轉載請自行聯系原作者