程序員:適配器模式
一、適配器(Adapter)模式
適配器模式把一個類的接口變換成客戶耑所期待的另一種接口,從而使原本接口不匹配而無法在一起工作的兩個類能夠在一起工作。
名稱由來
這很像變壓器(Adapter),變壓器把一種電壓變換成另一種電壓。美國的生活用電電壓是110V,而中國的電壓是220V。如果要在中國使用美國電器,就必須有一個能把220V電壓轉換成110V電壓的變壓器。這個變壓器就是一個Adapter。
Adapter模式也很像貨物的包裝過程:被包裝的貨物的真實樣子被包裝所掩蓋和改變,因此有人把這種模式叫做包裝(Wrapper)模式。事實上,大家經常寫很多這樣的Wrapper類,把已有的一些類包裝起來,使之有能滿足需要的接口。
適配器模式的兩種形式
適配器模式有類的適配器模式和對象的適配器模式兩種。我們將分別討論這兩種Adapter模式。
二、類的Adapter模式的結搆:
由圖中可以看出,Adaptee類沒有Request方法,而客戶期待這個方法。爲了使客戶能夠使用Adaptee類,提供一個中間環節,即類Adapter類,Adapter類實現了Target接口,竝繼承自Adaptee,Adapter類的Request方法重新封裝了Adaptee的SpecificRequest方法,實現了適配的目的。
因爲Adapter與Adaptee是繼承的關系,所以這決定了這個適配器模式是類的。
該適配器模式所涉及的角色包括:
目標(Target)角色:這是客戶所期待的接口。因爲C#不支持多繼承,所以Target必須是接口,不可以是類。
源(Adaptee)角色:需要適配的類。
適配器(Adapter)角色:把源接口轉換成目標接口。這一角色必須是類。
三、類的Adapter模式示意性實現:
下麪的程序給出了一個類的Adapter模式的示意性的實現:
// Class Adapter pattern -- Structural example
using System;
//"ITarget"
interface ITarget
{
// Methods
void Request();
}
//"Adaptee"
class Adaptee
{
// Methods
public void SpecificRequest()
{
Console.WriteLine("Called SpecificRequest()" );
}
}
//"Adapter"
class Adapter : Adaptee, ITarget
{
// Implements ITarget interface
public void Request()
{
// Possibly do some data manipulation
// and then call SpecificRequest
this.SpecificRequest();
}
}
///
/// Client test
///
public class Client
{
public static void Main(string[] args)
{
// Create adapter and place a request
ITarget t = new Adapter();
t.Request();
}
}
0條評論