锁定老帖子 主题:N个if+else跟策略模式&&状态模式
精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-26
zean 写道 悲剧了 写道 zean 写道 对付常见的if else 工厂方法+策略模式
策略加工场能封装if里面的选择吗?只是if里面的执行罢了 策略的选择通过Map封装就行了,还要if else? 个人觉得Map,加上工厂模式 可以解决if else这种情况 ,当然是不可能完全代替的,比如多个条件的&&或者||这种情况 ,比较存在即合理,没有任何东西可以代替另外一种东西的存在 |
|
返回顶楼 | |
发表时间:2011-07-26
减少if-else最直接就表驱动法(当然这里分好几种表驱动方法),不过其实if-else保持清晰也无妨吧,不可以一竹打沉所有船!!
|
|
返回顶楼 | |
发表时间:2011-07-26
1、状态模式不是楼主那样的,用错啦。。。。
每种状态下定义了这种状态下所有可以进行的动作,而不是只有一个handle方法。 这样在执行某一个动作的使用,就定义好了是否可以跳转到相应的状态了,于是只要设置了初始状态,就完全省去了if-else语句。 另外,状态模式和状态机是完全不同的两个概念,状态机的概念更像是责任链模式。 2、策略模式的确无法摆脱if-else,但是他就像桥接模式一样,只要在开始的时候有一次if-else的判断,之后就不需要了,这不是很好的设计模式吗? 想让策略模式摆脱ifelse,完全可以使用map。 |
|
返回顶楼 | |
发表时间:2011-07-26
策略模式 中使用 MAP 就可以了
|
|
返回顶楼 | |
发表时间:2011-07-27
抛出异常的爱 写道 状态机不会减少if个数,
为什么状态机不会减少if个数?我记得读书那阵NFA 20 几个圈最后能画成3,4个 |
|
返回顶楼 | |
发表时间:2011-07-27
Map太好用了
|
|
返回顶楼 | |
发表时间:2011-07-29
都说的只是简单的 if else的 只要对修改关闭 对扩展开放 怎么写都可以
如果if else 里面嵌套 if else 业务逻辑超复杂的 而且还是易变的 那么就用规则引擎吧 |
|
返回顶楼 | |
发表时间:2012-06-20
jingua1026 写道 悲剧了 写道 hyj1254 写道 引用 只不过if else 里面的东西处理被封住了,if else 什么的还是在那摆着
单独使用策略模式的确不能减少if/else,可以配合简单工厂模式,《重构》里也是这么做的。但策略模式本身已经体现了单一职责的原则:把逻辑从客户端剥离出来,使客户端的职责更清晰。 确实是这样,但是要减少if else这个判断,结合工场模式怎么解决?工场模式不就是把选择放到工场里面了吗?实质对项目的if else并没有减少 if('A'.equals(state)){ concreteStateA.handle(); }else if('B'.equals(state)){ concreteStateA.handle(); } 采用简单工厂不就可以 KO了吗? StateFactory.java static Map<String,Class> states = new HashMap<String,Class>(); static{ states.put("A",ConcreteStateA.class); states.put("B",ConcreteStateB.class); } public static State createState(String key){ return (State)states.get(key).newInstance(); } StateFactory.createState(state).handle(); 这样子玩不就没有if else了吗? |
|
返回顶楼 | |