论坛首页 Java企业应用论坛

N个if+else跟策略模式&&状态模式

浏览 19941 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-07-26  
zean 写道
悲剧了 写道
zean 写道
对付常见的if else 工厂方法+策略模式



策略加工场能封装if里面的选择吗?只是if里面的执行罢了

策略的选择通过Map封装就行了,还要if else?

个人觉得Map,加上工厂模式 可以解决if else这种情况 ,当然是不可能完全代替的,比如多个条件的&&或者||这种情况 ,比较存在即合理,没有任何东西可以代替另外一种东西的存在
0 请登录后投票
   发表时间:2011-07-26  
减少if-else最直接就表驱动法(当然这里分好几种表驱动方法),不过其实if-else保持清晰也无妨吧,不可以一竹打沉所有船!!
0 请登录后投票
   发表时间:2011-07-26  
1、状态模式不是楼主那样的,用错啦。。。。

每种状态下定义了这种状态下所有可以进行的动作,而不是只有一个handle方法。
这样在执行某一个动作的使用,就定义好了是否可以跳转到相应的状态了,于是只要设置了初始状态,就完全省去了if-else语句。

另外,状态模式和状态机是完全不同的两个概念,状态机的概念更像是责任链模式。


2、策略模式的确无法摆脱if-else,但是他就像桥接模式一样,只要在开始的时候有一次if-else的判断,之后就不需要了,这不是很好的设计模式吗?
想让策略模式摆脱ifelse,完全可以使用map。


0 请登录后投票
   发表时间:2011-07-26  
策略模式 中使用 MAP 就可以了
0 请登录后投票
   发表时间:2011-07-27  
抛出异常的爱 写道
状态机不会减少if个数,


为什么状态机不会减少if个数?我记得读书那阵NFA 20 几个圈最后能画成3,4个
0 请登录后投票
   发表时间:2011-07-27  
Map太好用了

0 请登录后投票
   发表时间:2011-07-29  
都说的只是简单的 if else的  只要对修改关闭 对扩展开放 怎么写都可以

如果if else 里面嵌套 if else 业务逻辑超复杂的 而且还是易变的 那么就用规则引擎吧
0 请登录后投票
   发表时间: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了吗?



0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics