`
ian-jiang
  • 浏览: 7667 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

状态模式 疑惑

阅读更多
有这样的一个关于“处理策略”需求:

=== 需求 ===
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());
	}
  • 描述: UML图
  • 大小: 7.8 KB
分享到:
评论
5 楼 hrtc 2008-03-14  
实现差不多用意不一样,工厂是创建型模式,策略是行为型模式,在运行时选择应用的策略。
4 楼 nighthawk 2008-03-14  
恕我眼拙,我怎么看得象工厂模式?
3 楼 hrtc 2008-03-14  
那个应该必须要写的,你那段代码相当于使用者,使用者必须自己知道要用什么策略,策略模式封装了策略的具体实现,并可以灵活的添加策略,使用者无需知道内部算法只要知道要什么算法就行了,这才是策略模式的用意。
2 楼 ian-jiang 2008-03-14  
hrtc 写道
直接用策略模式不就行了,干嘛要用状态模式,并且状态模式里每个状态都知道它的下个状态如何转换,你的各个状态好像没什么关系,没必要用状态模式。


确实应该用“策略模式”,但是“策略模式”里也没有定义“选择具体策略”的角色,看来if/else的判断是在所难免了。维护这样的if/else总觉得欠妥。而且客户端也必须知道所有的具体策略,然后进行选取。
1 楼 hrtc 2008-03-13  
直接用策略模式不就行了,干嘛要用状态模式,并且状态模式里每个状态都知道它的下个状态如何转换,你的各个状态好像没什么关系,没必要用状态模式。

相关推荐

    PatternDesign设计模式.pdf

    - 状态模式:允许一个对象在其内部状态改变时改变它的行为。 - 策略模式:定义一系列的算法,把它们一个个封装起来,并使它们可相互替换。 - 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类...

    易学设计模式

    3. **观察者模式(Observer Pattern)**:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其所有依赖者都会得到通知并自动更新。适用于事件处理系统、图形界面组件等。 4. **策略模式(Strategy ...

    西门子3RW44软起动器:通过爬行模式来改变的旋转角方向.pdf

    在调整过程中,若遇到具体的技术问题或疑惑,可以联系西门子官方技术支持,通过提供的服务与支持获取专业的解答和帮助。同时,用户还可以访问西门子官方网站或其他专业资源获取相关的技术文档和指导手册,以确保正确...

    Android-最简单的状态切换布局

    在Android开发中,状态切换布局是一个非常实用的设计模式,它能帮助开发者优雅地处理各种不同状态的显示,如数据加载中、数据加载失败、数据为空、网络错误等。"Android-最简单的状态切换布局"这一主题就是围绕如何...

    线上线下结合的计算机网络虚拟仿真实践教学模式.pdf

    实际上,学生个体学习能力和学习效果存在差异,流水线式的教学可能造成学生在教学学习过程中对某一要点存在疑惑或不理解,有可能带着疑惑继续完成当次的后续学习内容,结果可能就是疑问的雪球越滚越大,最终教学和...

    解答有关REST的十点疑惑.doc

    以下是对REST疑惑的详细解答: 1. REST不仅限于CRUD: REST不仅仅局限于基本的数据库操作,它可以处理更复杂的业务逻辑。虽然GET、PUT、POST和DELETE对应于创建、读取、更新和删除资源,但这并不意味着REST不能...

    大数据背景下的高等数学的混合分层式教学模式探析.pdf

    在线上教学中,教师可以即时了解学生的学习状态,对于学生的错误和疑惑能够及时地给予反馈和解答。同时,大数据技术的应用使得教师能够从宏观角度把握教学进度与效果,及时调整教学策略。 综上所述,在大数据时代...

    教学模式政治.docx

    在实施过程中,教师需准确把握教学目标,设计简洁明了的自学提纲,并时刻关注学生的学习状态,适时调整教学策略,以确保“102510”模式的有效运行。同时,持续反思和改进,以适应不同学生的学习需求,促进教学质量的...

    面向持续改进的计算机网络课程线上线下混合模式建设实践.pdf

    这种模式结合了线上教学的灵活性和线下教学的互动性,使得教师能更好地掌握学生的学习状态,针对性地调整教学内容和进度,提升教学效果。同时,通过持续收集和分析学生反馈,可以不断迭代优化课程设计,实现课程的...

    小学数学单元复习课模式与教学教案.doc

    这不仅扩展了教学时间,也促使学生提前进入学习状态,形成自我学习的习惯。 2. 课上内化巩固复习: - 交流回顾、调整起点:教师引导学生分享课前复习的成果和疑惑,以此调整教学计划,确保复习内容更具针对性。 -...

    学前教育专业舞蹈教学中的双主题互动模式

    教师通过自身的专业舞蹈技能,示范并指导学生掌握标准的舞蹈动作,同时解答学生的疑惑,帮助他们提升专业水平。而学生之间的互动则有助于解决因年龄差异导致的理解难题,通过同伴间的交流和合作,共同加深对舞蹈知识...

    雨课堂模式的高校钢琴教学改革探究.docx

    教师可以通过数据反馈了解每个学生的学习状态,针对性地提供辅导,确保每位学生都能得到适合自己的教学资源。对于基础较弱的学生,教师可以提前发布教学视频和资料,让他们在课前做好准备,缩小与他人的差距。 此外...

    高一政治课问题中心教学模式.doc

    1. **问题意识的形成**:问题意识是指个体对未解问题或疑惑产生的探索心理状态,它能驱动学生积极参与思维活动,提出问题并寻求解答。问题可以使学生的注意力集中,促进有针对性的思维和探索。 2. **问题类型与分类...

    Java 线程间数据交换的疑惑

    这篇博客“Java线程间数据交换的疑惑”可能探讨了在并发编程中如何有效地共享和同步数据。`volatile`关键字是Java中用于实现线程间通信的一个重要工具,它在多线程环境下起着关键的作用。 首先,我们要理解`...

    慕课理念下生物教育教学模式的改革和思考.docx

    例如,教师可以通过制作或选取相关的慕课视频,让学生看到不同生物在各种环境下的生存状态,从而理解生物与环境的相互影响,提高教学效果。 其次,慕课有助于培养学生的自主学习能力。在课前预习或课后复习环节,...

    浅析互联网+背景下高中政治课堂的新模式.docx

    1. 构建网络教学平台:利用QQ、微信等社交媒体工具,教师可以创建在线学习社区,及时解答学生疑惑,增强师生之间的沟通。网络平台还能为学生提供丰富的学习资源,鼓励他们自我探索,培养自主学习能力。 2. 多样化...

    app状态页dashboard .xd素材下载

    设计良好的状态页可以使用户更加清楚地了解应用的工作状态,减少疑惑和挫败感。 接下来,"Dashboard"这个词意味着这些设计素材可能涉及的是一个控制面板或者仪表盘界面。在许多应用中,dashboard作为主要的交互界面...

    Keil软件调试时监控数据动态刷新设置

    总的来说,启用“定期刷新窗口”的功能能够为开发者提供一种实时监控程序执行情况的方法,减少了因窗口不刷新带来的疑惑,并提高了调试过程的效率。在进行软件调试时,应该始终检查这一设置是否已经启用,以免在软件...

    数字逻与电路辑复习题答案

    - **判断题**讨论了逻辑门的工作状态,如饱和区、转折区、线性区和截止区,这些都是晶体管工作在不同模式时的状态。 3. **组合逻辑电路**: - **选择题**涉及了逻辑函数的简化方法,如Karnaugh地图(K-Map)和...

    安卓微信相关相关-类似微信断网时候的提示处理.rar

    这种提示既提醒用户问题所在,又避免了因无响应引发的用户疑惑。 3. **错误处理与重试机制**: - 微信在发送消息或执行其他网络操作时,如果遇到网络中断,会有一个内置的重试机制。比如,它可能会在后台定时尝试...

Global site tag (gtag.js) - Google Analytics