首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

模式新手,向高手请问。策略模式这样用对吗

2012-11-15 
模式新手,向高手请教。策略模式这样用对吗?我实在是花了很大决心打算写此文请教各位高手。因为发现这里高手

模式新手,向高手请教。策略模式这样用对吗?
我实在是花了很大决心打算写此文请教各位高手。因为发现这里高手实在多,帖子质量实在高,我还是刚工作的菜鸟,刚学点模式想在项目里试试,请各位帮忙看看,给点意见,我一定虚心接受。

首先这是一个对帐功能,就是从数据库A得到表1的交易,去和数据库B中表2的交易去匹配,如果没什么问题就pass,一旦有不和谐的地方就作为异常交易显示出来。以下是活动图:

思路大致这样,先得到交易的状态(确认成功,确认失败,已撤销,未确认),根据不同状态去选择不同策略(我当时就这么想的,后来多少感觉有点问题,也许这个根本不是策略模式,唉,就请大家看看)

[img]http://jorwen-fang.iteye.com/upload/picture/pic/3230/bdf25f35-a14f-4a21-8351-e5f6c9f8fe2d.jpg [/img]

1. action部分代码



3.策略类父类


4.策略子类,其他3个也差不多,就省略了
#         {  
#             strategy = new StrategyConfirmFailure(); 
#         } 
#         else if ( confirmFlag.equals( "1" ) ) 
#         { 
#             strategy = new StrategyConfirmSuccess(); 
#         } 
#         else if ( confirmFlag.equals( "4" ) ) 
#         { 
#             strategy = new StrategyAlreadyRepeal(); 
#         } 
#         else if ( confirmFlag.equals( "9" ) ) 
#         { 
#             strategy = new StrategyUnconfirm(); 
#         } 
#     } 

这个方法的代码好像有点多余,直接用set动态注入策略的实现应该更好点。 

熟悉设计模式的人一看就知道,这是一个工厂模式的典型应用,也就是说,你一看到这样的代码就应当联系到工厂模式。建立一个工厂,将StrategyConfirmFailure、StrategyConfirmSuccess等都放进去,然后代码可以改为:
strategy = (Strategy)StrategyFactory.getBean(confirmFlag);

这样才可以扩展confirmFlag的状态而又符合OCP原则。 11 楼 jorwen_fang 2007-05-31   感谢楼上给的意见

热点排行