《设计模式 ● 适配器》之业务场景
来源:互联网 发布:在线模拟post请求源码 编辑:程序博客网 时间:2024/06/06 00:24
/**************************************************************************************************
** 设计思想需要归纳与提炼,无论简单抑或复杂。当然方案未必是唯一的最佳路径,在总结
** 的过程中发现问题、改善问题;只有跳出业务,将复杂问题简单化,才能提纲挈领,寻找
** 共性与变化的制高点!
************************************************************************************************/
适配器:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作,其实更通俗的讲就是将鸡适配成鸭,将鸡蛋适配成鸭蛋,将屁股适配成脸(这个有点过-_-|||)。
§ 场景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
用户类型适配:
树形结构适配:
付款适配:
- 《设计模式 ● 适配器》之业务场景
- 《设计模式 ● 观察者》之业务场景
- 《设计模式 ● 外观》之业务场景
- 《设计模式 ● 策略者》之业务场景
- 《设计模式 ● 中介者》之业务场景
- 《设计模式 ● 责任链》之业务场景
- 研磨设计模式之迭代器业务场景
- 研磨设计模式之适配器模式(Adapter)-场景问题
- Java设计模式之《适配器模式》及应用场景
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器
- 设计模式 之 适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- C# 自动登录DiscuzNT论坛并发帖
- 按键事件的处理
- CPU详解
- 很烦
- NAT与NAT穿透(一)
- 《设计模式 ● 适配器》之业务场景
- SQL2005 自定义函数
- SQL2005 自定义函数
- alias 命令的用法
- SQL Server 2005 自定义函数语汇小结
- linux命令 ulimit 用法详解
- Arrays.asList 使用注意
- CRF使用的评测程序conlleval.pl都能识别什么符号的标记啊???急求大师指教!
- 反思中国目前的软件盗版现象,应该为盗版"平反"