四、對象的Adapter模式的結構:
從圖中可以看出:客戶端需要調用Request方法,而Adaptee沒有該方法,為了使客戶端能夠使用Adaptee類,需要提供一個包裝(Wrapper)類Adapter。這個包裝類包裝了一個Adaptee的實例,從而將客戶端與Adaptee銜接起來。由於Adapter與Adaptee是委派關系,這決定了這個適配器模式是對象的。
該適配器模式所涉及的角色包括:
目標(Target)角色:這是客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。
源(Adaptee)角色:需要適配的類。
適配器(Adapter)角色:通過在內部包裝(Wrap)一個Adaptee對象,把源接口轉換成目標接口。
五、對象的Adapter模式示意性實現:
下面的程序給出了一個類的Adapter模式的示意性的實現:
// Adapter pattern -- Structural example
using System;
// "Target"
class Target
{
// Methods
virtual public void Request()
{
// Normal implementation goes here
}
}
// "Adapter"
class Adapter : Target
{
// FIElds
private Adaptee adaptee = new Adaptee();
// Methods
override public void Request()
{
// Possibly do some data manipulation
// and then call SpecificRequest
adaptee.SpecificRequest();
}
}
// "Adaptee"
class Adaptee
{
// Methods
public void SpecificRequest()
{
Console.WriteLine("Called SpecificRequest()" );
}
}
/**//// <summary>
/// ClIEnt test
/// </summary>
public class ClIEnt
{
public static void Main(string[] args)
{
// Create adapter and place a request
Target t = new Adapter();
t.Request();
}
}