讲故事学设计模式-状态(State)模式
来源:互联网 发布:mysql安装配置 编辑:程序博客网 时间:2024/04/27 19:30
状态模式主要是为了能在运行期改变状态。
1、故事
人的经济状况决定了生活状况,他们或许富可敌国又或者穷困潦倒。这两种状态——富有和贫穷——会随着时间相互变化(古语有云:穷不过三代 富不过三代)。按照这种观点,我们举个例子:一般人都是在贫困时拼命工作(努力),在富裕时享受生活(懈怠)。他们所处的生活状态决定了他们的行为,而他们的行为又将会改变他们的生活状态,否则,这个社会就不公平了!
2、类图
下面是状态模式的类图,你可以和策略模式(Strategy Pattern)对比下,以便能更好的理解两者的不同之处。
3、源码
状态模式的Java实现如下,将给你演示它的工作流程。
State Clases
package com.programcreek.designpatterns.state; interface State {public void saySomething(StateContext sc);} class Rich implements State{@Overridepublic void saySomething(StateContext sc) {System.out.println("I'm rick currently, and play a lot.");sc.changeState(new Poor());}} class Poor implements State{@Overridepublic void saySomething(StateContext sc) {System.out.println("I'm poor currently, and spend much time working.");sc.changeState(new Rich());}}
StateContext Class
package com.programcreek.designpatterns.state; public class StateContext {private State currentState; public StateContext(){currentState = new Poor();} public void changeState(State newState){this.currentState = newState;} public void saySomething(){this.currentState.saySomething(this);}}
测试的Main Class
import com.programcreek.designpatterns.*; public class Main {public static void main(String args[]){StateContext sc = new StateContext();sc.saySomething();sc.saySomething();sc.saySomething();sc.saySomething();}}
I'm poor currently, and spend much time working. I'm rick currently, and play a lot.I'm poor currently, and spend much time working. I'm rick currently, and play a lot.
原文链接:http://www.programcreek.com/2011/07/java-design-pattern-state/
0 0
- 讲故事学设计模式-状态(State)模式
- 设计模式----State(状态)
- 讲故事,学(Java)设计模式—观察者模式
- 讲故事,学(Java)设计模式—观察者模式
- 讲故事学设计模式-装饰者(Decorator)模式
- 讲故事学设计模式-合成(Composite)模式
- 讲故事学设计模式-策略(Strategy)模式
- 讲故事学设计模式-门面(Facade)模式
- 讲故事,学(Java)设计模式—观察者模式
- 讲故事,学(Java)设计模式—工厂模式
- 讲故事,学(Java)设计模式—抽象工厂模式
- 讲故事,学(Java)设计模式—桥接模式
- 讲故事,学(Java)设计模式—桥接模式
- 讲故事,学(Java)设计模式—观察者模式
- 讲故事,学(Java)设计模式—桥接模式
- State(状态)设计模式
- 设计模式之State(状态模式)
- 设计模式 (十六)状态模式(State)
- 在GNU/Linux中查看端口占用情况的命令-lsof、netstat
- 2-sat 问题学习小记 Poj 3207 Ikki's Story IV - Panda's Trick (可行性判定)
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
- 变量的存储方式与生存期
- 前序 开始写博客
- 讲故事学设计模式-状态(State)模式
- C++ map的基本操作和使用
- SQLite数据库的增删改查
- 学习Java第一个类--Object
- 学习官方文档(photoLocations)
- uva 690 - Pipeline Scheduling(dfs+剪枝)
- UVaOJ_489 - Hangman Judge
- phonegap + xcode5.0.2 配置开发环境
- nyoj119