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

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

 

§案例场景:

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://download.youkuaiyun.com/download/webwalker/7470273


§总结:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值