`
long_yu2
  • 浏览: 333997 次
社区版块
存档分类
最新评论

Java程序员从笨鸟到菜鸟之(四十二)大话设计模式(八)状态模式

 
阅读更多

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188

状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。看起来,状态模式好像是神通广大很厉害似的——居然能够修改自身的类下面让我们一起来看一下他的厉害吧!

适用场景:

状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

要点:

1.策略模式和状态模式是双胞胎,它们有相同的类图,但是它们的意图不同。策略模式是围绕可以互换的算法来成功创建业务的,然而状态模式是通过改变对象内部的状态来帮助对象控制自己的行为.

2Context将与状态相关的操作委托给当前的ConcreteState对象处理。

3Context可将自身作为一个参数传递给处理该请求的状态对象。这使得状态对象在必要时可访问Context

4ContextConcreteState类都可决定哪个状态是另外哪一个的后继者,以及是在何种条件下进行状态转换。也就是说可以在State中保存对ConcreteState的引用,在必要时设置具体的状态,做到状态的转换。

5.一般来讲,当状态转换是固定的时候,状态转换就适合放在Context中。然而,当转换是更动态的时候,通常会放到具体的状态类中进行。(具体状态类持有Context的引用,实现状态的转换)

Context类:维护一个ConcreteState子类的一个实例,这个实例定义当前的状态。

State类:抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。

ConcreteStateA,ConcreteStateB类:具体状态类,每一个子类实现一个与Context的一个状态相关的行为。

具体实现:

先定义接口UserState


代表各个状态的类
未提交信息的用户NotSubmitUser.java




待审核的用户WaitForVerifyUser.java

Java代码



审核通过的用户,vipVipUser.java


根据用户的status的返回不同的UserState


状态模式操作是固定的,但是接受者类不相同。多态性的原则实际执行哪个方法不仅取决与方法签名,还取决与操作的接受者类。

该例子只是state模式的一个场景的应用,比较具体。
状态模式的优点

1.非常好的扩展性---假设增加一个用户组:当vip用户的信用达到一定程度后,升级到永久的vip。这时只需另外添加一个状态类,对原来的代码并不需要做改动。
2.代码结构清晰,不同出错。即程序健壮--UserStateFactorygetUserState(intstatus)外,其他方法的逻辑非常的简单,都不包含局部变量。如果程序不需要持久化到数据库,也不需要getUserState(intstatus),该方法是状态模式内容之外的。用状态模式类的数量会大大的增加。

说明:该例子只是状态模式的一个应用,并不是状态模式,是属于比较具体

分享到:
评论

相关推荐

    java程序员-从笨鸟到菜鸟.pdf

    java程序员-从笨鸟到菜鸟.pdf

    [网盘]java程序员由菜鸟到笨鸟.pdf

    ### Java程序员成长之路——从菜鸟到笨鸟 #### 一、引言 《Java程序员由菜鸟到笨鸟》是一本由曹胜欢编写的书籍,旨在帮助初学者掌握Java编程的基础知识,并逐步进阶至更高级的应用场景。本书不仅适合初学者作为...

    JAVA程序员 从笨鸟到菜鸟.pdf

    曹胜欢在《JAVA程序员 从笨鸟到菜鸟.pdf》中分享了他个人学习Java的经历,从迷茫到逐渐成长的过程。他强调了自学的重要性,并鼓励初学者不要怕走弯路,同时希望自己的经验可以帮助到同样在学习Java的初学者。 2. ...

    java程序员从笨鸟到菜鸟

    ### Java程序员从笨鸟到菜鸟 #### 一、开发环境搭建与基本语法 ##### 开发环境搭建 在开始Java的学习之前,首先需要搭建一个合适的开发环境。这通常涉及到以下步骤: 1. **JDK(Java Development Kit)安装**:...

    Java程序员由菜鸟到笨鸟学习文档

    Java程序员的成长之路是一个充满挑战与探索的过程,从初学者到熟练掌握各项技能,需要系统性的学习和实践。"Java程序员由菜鸟到笨鸟学习文档"就是这样一个旨在帮助初入Java世界的学习者逐步进阶的资源。它覆盖了从...

    《Java程序员-从笨鸟到菜鸟》PDF下载

    资源名称:《Java程序员-从笨鸟到菜鸟》PDF 下载资源目录:作者简介:..........................................................................................................................................

    java程序员由菜鸟到笨鸟

    《java程序员由菜鸟到笨鸟》 刚开始学习java时看过的一个学习资料。 其中包括开发环境搭建、面向对象、Javascript、设计模式、SSH、jquery、java虚拟机等内容。 设计内容较广,可以学习参考。

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_19

    本书名为《Java程序员由菜鸟到笨鸟》,作者是曹胜欢。虽然无法直接查看具体内容,但基于标题、描述以及常见的Java学习路径,我们可以总结出该书可能涵盖的一些关键知识点。 ### Java基础知识 1. **Java概述**: -...

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_17

    根据提供的文件信息,“Java程序员由菜鸟到笨鸟”是一本旨在帮助初学者成长为合格Java开发者的书籍。本书作者为曹胜欢,发布日期为2018年3月17日。以下是从该书的标题、描述以及部分可能包含的内容中提炼出的关键...

    java游戏笨鸟

    《Java游戏:笨鸟》(也称为FlappyBird)是一款基于Java编程语言开发的简单游戏,旨在帮助初学者更好地理解和掌握Java编程基础。这款游戏的实现涉及了许多Java编程的关键概念和技术,下面将对这些知识点进行详细阐述...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案

Global site tag (gtag.js) - Google Analytics