六、在什麼情況下使用適配器模式
在以下各種情況下使用適配器模式:
1、系統需要使用現有的類,而此類的接口不符合系統的需要。
2、想要建立一個可以重復使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有很復雜的接口。
3、(對對象適配器而言)在設計裡,需要改變多個已有子類的接口,如果使用類的適配器模式,就要針對每一個子類做一個適配器,而這不太實際。
七、一個實際應用Adapter模式的例子
下面的程序演示了Class Adapter與Object Adapter的應用。
// Example of implementing the Adapter pattern
using System;
// Target
public interface ICar
{
void Drive();
}
// Direct use without Adapter
public class CToyota : ICar
{
public void Drive()
{
Console.WriteLine("Vroom Vroom, we're off in our Toyota");
}
}
// Adaptee
public class CCessna
{
public void Fly()
{
Console.WriteLine("Static runup OK, we're off in our C172");
}
}
// Class Adapter
public class CDrivableCessna : CCessna, ICar
{
public void Drive() { base.Fly(); }
}
// Object Adapter
public class CDrivableCessna2 : ICar
{
private CCessna m_oContained;
public CDrivableCessna2()
{
m_oContained = new CCessna();
}
public void Drive() { m_oContained.Fly(); }
}
// ClIEnt
public class ClIEnt
{
public static void Main(string[] args)
{
ICar oCar = new CToyota();
Console.Write("Class Adapter: Driving an Automobile");
oCar.Drive();
oCar = new CDrivableCessna();
Console.Write("Driving a Cessna");
oCar.Drive();
oCar = new CDrivableCessna2();
Console.Write(" Object Adapter: Driving a Cessna");
oCar.Drive();
}
}