讲故事学设计模式-状态(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