现在的位置: 首页 > 综合 > 正文

《架构模式应用 ● 设计模式》之装饰者

2013年10月28日 ⁄ 综合 ⁄ 共 1431字 ⁄ 字号 评论关闭

/**************************************************************************************************
** 设计思想需要归纳与提炼,无论简单抑或复杂。当然方案未必是唯一的最佳路径,在总结
** 的过程中发现问题、改善问题;只有跳出业务,将复杂问题简单化,才能提纲挈领,寻找
** 共性与变化的制高点!
************************************************************************************************/

 

§案例场景:

1、交易订单有诸多分类,且每种类都有各自的附加业务规则与逻辑:

    所以在保存订单时,我们往往会附加不同业务处理,以填充业务订单实体。

    eg: 计算积分规则、业务类型、额外扩展信息处理

    另外,在根据不同业务类型,获取订单扩展信息时,也需要额外附加职责。

2、参数校验

    参数校验通常体现在提供服务的接口上,不同的接口、不同的业务类型会存在不同的参数、业务校验规则,抑或是横向、纵向扩展,这里是一个变化点。

§分析设计:

    以上两类问题通常有个基本点,就是他们的事务处理大部分逻辑会有共性的表现,而后则是不同行为的修饰与扩展。

§设计实现:

1、 设计类图



2、 代码实现

订单修饰:

                DepositOrderInfo orderInfo = new DepositOrderInfo();
                //订单主体
                IOrders orders = new MainOrder();
                //修饰
                orders = new ShopOrderDecorator(orders);
                //根据业务类型取得不同修饰对象
                InterfaceFactory factory = new InterfaceFactory();
                factory.PayChannel = payInfo.PayChannel;
                orders = factory.OrderDecoratorInstance(orders);
                //修饰
                orders = new MerchantOrderDecorator(orders);
                orders.FillOrderInfo(orderInfo, payInfo);

参数解析修饰:

                IParameters parameters = new ParameterService();
                //单层修饰
                parameters = new ShopParameter(parameters);
                ShopParameterInfo payInfo = parameters.AnalyzeParameter<ShopParameterInfo>(requestInfo);
                //......

                //校验参数
                int returnCode = parameters.ValidateParameter(payInfo);
                if (returnCode != Consts.Success)
                {
                    return GetResponse(returnCode);
                }

3、主要示例代码

      http://url.cn/BdpeGp

§总结:

    案例实现简单,没有多层修饰的行为,但是当存在多层修饰时,可以根据不同的业务类型与渠道,定义不同的修饰路径,完成多层修饰。

抱歉!评论已关闭.