/************************************************************************************************** |
策略模式: 定义一系列的算法,把他们封装起来,并可以相互替换,使算法独立于客户。文字浅显易懂,在实际应用中业务场景变幻莫测,同样有不同的变种。
§ 场景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:委托提现、委托付款、委托充值等等都有各自的委托策略)。