浏览 3091 次
锁定老帖子 主题:状态模式 疑惑
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-13
=== 需求 === 1. 处理策略有若干种类型,比如说,按人员,按部门等。 2. 处理策略需要有一个方法就是判断当前的用户是否符合处理策略: * 如果处理策略是按人员,当前用户是否是该人员 * 如果处理策略是按部门,当前用户是否是属于该部门 3. 对应不同的处理策略类型,判断当前的用户是否符合处理策略有不同的逻辑 === 设计 === 自己准备用状态(或策略)模式来做, 请看UML类图。 在做的时候,遇到一个问题:对于“选择具体状态类的角色”这部分逻辑,我把它放在了AssignRule里。 这部分逻辑出现很多的if/else代码,不知道如何修改? /** * initialize State instance, according to type of rule * @param rule */ private void initState(Rule rule) { String type = rule.getType(); //FIXME: how to eliminate if else if ("1".equals(type)) setState(new PersonState()); else setState(new DepartmentState()); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-13
直接用策略模式不就行了,干嘛要用状态模式,并且状态模式里每个状态都知道它的下个状态如何转换,你的各个状态好像没什么关系,没必要用状态模式。
|
|
返回顶楼 | |
发表时间:2008-03-14
hrtc 写道 直接用策略模式不就行了,干嘛要用状态模式,并且状态模式里每个状态都知道它的下个状态如何转换,你的各个状态好像没什么关系,没必要用状态模式。
确实应该用“策略模式”,但是“策略模式”里也没有定义“选择具体策略”的角色,看来if/else的判断是在所难免了。维护这样的if/else总觉得欠妥。而且客户端也必须知道所有的具体策略,然后进行选取。 |
|
返回顶楼 | |
发表时间:2008-03-14
那个应该必须要写的,你那段代码相当于使用者,使用者必须自己知道要用什么策略,策略模式封装了策略的具体实现,并可以灵活的添加策略,使用者无需知道内部算法只要知道要什么算法就行了,这才是策略模式的用意。
|
|
返回顶楼 | |
发表时间:2008-03-14
恕我眼拙,我怎么看得象工厂模式?
|
|
返回顶楼 | |
发表时间:2008-03-14
实现差不多用意不一样,工厂是创建型模式,策略是行为型模式,在运行时选择应用的策略。
|
|
返回顶楼 | |