模式新手,向高手请教。策略模式这样用对吗?
我实在是花了很大决心打算写此文请教各位高手。因为发现这里高手实在多,帖子质量实在高,我还是刚工作的菜鸟,刚学点模式想在项目里试试,请各位帮忙看看,给点意见,我一定虚心接受。
首先这是一个对帐功能,就是从数据库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 感谢楼上给的意见