《设计模式 ● 策略者》之业务场景

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

       策略模式: 定义一系列的算法,把他们封装起来,并可以相互替换,使算法独立于客户。文字浅显易懂,在实际应用中业务场景变幻莫测,同样有不同的变种。

§ 场景1

      应用系统提供菜单给使用者,但系统菜单往往随以下因素会有不同的变化:

1、 对部分用户提供系统默认类型的菜单结构与UI

2、 对部分用户提供该用户有权限的菜单结构与UI

3、 对部分用户提供该用户自定制的菜单结构与UI

4、 对部分用户提供系统局部菜单特殊结构与UI

5、甚至有对另一部分用户提供外部系统菜单结构与UI

6、……

诸如此类的不同逻辑、算法时,策略不定选择的充分条件,但至少是必要条件。

 


 


补充不同策略对应的格式化器:



代码示例:

http://download.csdn.net/download/webwalker/7470423


            //执行获取所有可用菜单策略
            ContextMenu context = new ContextMenu(new AllMenuStrategy(menuDoc));
            context.Action();
            //执行获取商户有权限的菜单策略
            ContextMenu context = new ContextMenu(new AuthMenuStrategy(menuDoc));
            context.Action();
            //产品中心有权限菜单策略
            context = new ContextMenu(new ProductMenuStrategy());
            context.Action();

            AccountRequestStrategy strategy = new AccountRequestStrategy();
            StrategyContext context = new StrategyContext(strategy);

            //保存文件映射
            return new RemoteStorageService().SaveFile(new RemoteStorageInfo
            {
                Data = context.Action(logs).ToString(),
                Path = MerchantConfig.GetConfig("FosPaymentRequest"),
                StoreType = (int)Consts.StorageType.Fos,
                MerchantID = batch.PayMerchantID,
                BizNo = batch.BachCode
            });

§ 场景2

       作业调度系统,针对不同的算法、逻辑采用不同的调度算法。当然这里有很多变体,小到一个Schedue Job,针对不同的委托请求,执行不同的委托策略算法(eg:委托提现、委托付款、委托充值等等都有各自的委托策略)。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值