/************************************************************************************************** |
適配器:將一個類的接口轉換成客戶希望的另一個接口,使得原來由於接口不兼容而不能一起工作的那些類可以一起工作,其實更通俗的講就是將雞適配成鴨,將雞蛋適配成鴨蛋,將屁股適配成臉(這個有點過-_-|||)。
§ 場景1
逆向適配:遠程服務暴露諸多接口,每個接口都有一系列同類的外部方法,這些方法的調用,需要同類型不同namespace的模型類,示例如下:
適配視圖:
適配代碼:
/// <summary>
/// 基類頭
/// </summary>
public abstract class BaseHeader<T>
{
public abstract T GetRequestHeader();
/// <summary>
/// 請求Header
/// </summary>
protected RequestHeader RequestHeader
{
get
{
RequestHeader header = new RequestHeader();
header.Version = "10";
header.RequestNo = System.Guid.NewGuid().ToString();
header.RequestTime = DateTime.Now;
header.SourceId = ToolUtils.AppType;
return header;
}
}
}
/// <summary>
/// IFunctionService
/// </summary>
public class FunctionHeader : BaseHeader<requestHeader>
{
public override requestHeader GetRequestHeader()
{
requestHeader header = new requestHeader();
header.version = RequestHeader.Version;
header.requestNo = RequestHeader.RequestNo;
header.requestTime = RequestHeader.RequestTime;
header.sourceId = RequestHeader.SourceId;
return header;
}
}
/// <summary>
/// Summary description for InterfaceFactory
/// </summary>
internal class InterfaceFactory
{
#region Init
static readonly InterfaceFactory _Instance = new InterfaceFactory();
/// <summary>
/// Instance
/// </summary>
public static InterfaceFactory Instance
{
get
{
return _Instance;
}
}
#endregion
/// <summary>
/// 獲取RequestHeader
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public object RequestHeader(AuthConsts.InterfaceType type)
{
switch (type)
{
case AuthConsts.InterfaceType.IFunctionService:
return new FunctionHeader().GetRequestHeader();
case AuthConsts.InterfaceType.IOperatorRoleService:
return new OperatorRoleHeader().GetRequestHeader();
case AuthConsts.InterfaceType.IOperatorWS:
return new OperatorWSHeader().GetRequestHeader();
}
throw new MemberAuthException(ErrorConsts.SysError);
}
}
調用:
using (var service = GetService())
{
getAllGrantedAuthorityRequest request = new getAllGrantedAuthorityRequest();
request.header = InterfaceFactory.Instance.RequestHeader(AuthConsts.InterfaceType.IFunctionService) as requestHeader;
//......
}
§ 場景2
用戶類型適配:
樹形結構適配:
付款適配: