適配器設計模式是把一個類的介面轉化成用戶端期望的介面,從而使原本介面不匹配的兩個類能一起工作。
實際中這種情境很容易碰到,比如A類型手機充電器需要10V電壓充電,B類型手機需要15V電壓充電。A類型手機的充電器價格非常昂貴,而B類型的充電器價格低廉。市場就有可能出現把B型充電器轉換成A型手機匹配的適配器。
適配器設計模式有兩種:
類適配器:使用繼承實現介面轉換。
執行個體適配器:使用組合實現介面轉換。
類適配器類圖:類適配器設計的角色:
源:被適配的類。
目標:客戶期望的介面.由於適配器需要繼承源。所以目標必須是介面。
適配器:把源介面轉換成目標介面。適配器需要繼承源。
代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Hbb0b0.DesignPatter
{
/// <summary>
/// 源:被適配者
/// </summary>
public class Adaptee
{
/// <summary>
/// 響應特殊的請求
/// </summary>
public void SpecialRequest()
{
Console.WriteLine("Call SpecialRequest");
}
}
/// <summary>
/// 目標:用戶端期望的介面。必須是介面
/// </summary>
public interface ITarget
{
/// <summary>
/// 用戶端期望的響應要求方法
/// </summary>
void Request();
}
/// <summary>
/// 適配器
/// </summary>
public class ClassAdapter : Adaptee,ITarget
{
#region ITarget 成員
/// <summary>
/// 實現期望的介面
/// </summary>
public void Request()
{
base.SpecialRequest();
}
#endregion
}
}
調用樣本:
//類適配器
Console.WriteLine("類適配器");
ITarget iTarget = new ClassAdapter();
iTarget.Request();
執行個體適配器類圖執行個體適配器設計的角色:
源:被適配的類。
目標:客戶期望的介面.由於適配器中封裝源。所以目標可以是類,抽象類別,介面。
適配器:把源介面轉換成目標介面。適配器封裝源。
代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Hbb0b0.DesignPatter
{
/// <summary>
/// 源:被適配者
/// </summary>
public class Adaptee
{
/// <summary>
/// 響應特殊的請求
/// </summary>
public void SpecialRequest()
{
Console.WriteLine("Call SpecialRequest");
}
}
/// <summary>
/// 目標:用戶端可以期望介面,可以是具體類也可以是抽象類別,
/// 也可以是介面
/// </summary>
public class Target
{
/// <summary>
/// 期望的方法
/// </summary>
virtual public void Request()
{
}
}
}
/// <summary>
/// 適配器:內部封裝源,把源介面轉換成目標介面
/// </summary>
public class InstanceAdapter : Target
{
private Adaptee adaptee = null;
public InstanceAdapter(Adaptee adt )
{
adaptee = adt;
}
public override void Request()
{
adaptee.SpecialRequest();
}
}
}
調用樣本:
//對象適配器
Console.WriteLine("對象適配器");
Adaptee adt=new Adaptee ();
Target target = new InstanceAdapter(adt );
target.Request();