状态模式

状态模式

在学习nio编程的时候,遇到需要在不同的状态间进行转换,程序也需要根据不同的状态作不同的处理,搜了下相应的设计模式,果然发现有种叫”状态模式“的非常符合自己的需要,简单地做个记录

按照惯例,还是先上UML图,从图中可以看出, 状态模式有两个重要的组成部分,一个是上下文,也就是维护状态的地方;另一个则是状态,不同的状态决定了在同一个上下文中会执行不同的操作. 状态模式允许一个对象在其内部状态发生变化时改变其行为,就好像改变了一个类的实现一样.

state-pattern

举个例子,信用卡在银行进行开户后,默认是处于已激活的状态,当用户进行消费后,处于透支状态,如果用户消费的额度超过了银行给的额度,则信用卡处于被冻结状态,针对这三种状态下,银行对于用户刷卡这个行为要执行的操作是不一样的. 这里银行可以被当作是状态的上下文,而银行卡的状态决定了上下文执行的具体操作.

另外,在状态模式中,有个很重要的问题,就是状态的迁移,目前的实现中有三种方式,

  • 由外部调用类来管理状态的变换: 要求外部调用类了解所有的状态,且在增加状态的时候,需要修改客户端代码,不推荐

  • 完全由上下文类来管理状态的变迁: 状态对外部完全不可见,仅在上下文内部维护,在增加状态的时候,不需要修改客户端的代码,推荐

  • 由状态类自己完全变迁: 状态类之间产生依赖关系

参考文献

  1. http://blog.csdn.net/lovesomnus/article/details/45750039

  2. https://sourcemaking.com/design_patterns/state

您的支持将鼓励我继续创作!