/************************************************************************************************** |
适配器:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作,其实更通俗的讲就是将鸡适配成鸭,将鸡蛋适配成鸭蛋,将屁股适配成脸(这个有点过-_-|||)。
§ 场景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
用户类型适配:
树形结构适配:
付款适配: