State 状态模式

State 状态模式

目录

[TOC]

1. 概述

1.1. Head First设计模式定义

状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它自己的类。
状态模式将状态封装为独立的类,并将动作委托到代表当前状态的对象。

1.2. 自我理解

状态首先分为两种,”开关切换状态” 和”一般的状态判断”。
“一般的状态判断”:就是我们常用的数据状态,该场景不适合用状态模式。例如我们数据库的性别字段通常用 0=>男,1=>女,9=>其他,举例如下:

”开关切换状态“:当我们的状态切换,并且是闭环的一种状态时,就适合用状态模式了。例如我们的车钥匙状态,LOCK->ACC, ACC->ON, ON->START, START->LOCK,形成了闭环状态的切换;

1.3. 状态模式的组成

上下文 (Context):用户对象,拥有(聚合)一个 State 类型的成员,以标识对象的当前状态。
抽象状态 (State):接口或基类,封装与 Context 的特定状态相关的行为。
具体状态 (ConcreteState):接口实现类或子类,实现了一个与 Context 某个状态相关的行为。

2. UML

3. Example

3.1. 场景

随便想一个场景,汽车钥匙孔的状态,lock、acc、on、start,钥匙旋转实现对应的状态更改。

3.2. 代码实现

3.3. 运行结果

原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]

本文链接地址: http://www.loserzhao.com/java/designpattern/state-designpattern.html

文章的脚注信息由WordPress的wp-posturl插件自动生成

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

使用新浪微博登陆