文档章节

行为型模式之二:状态模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:39
字数 333
阅读 32
收藏 0

状态模式常用于运行时变更状态。

状态模式故事

人可能生活在不同的经济状态下,可能富有,可能贫穷。随着时间的迁移,富有与贫穷两个状态可以相互转换,这个想法背后的例子:当他们贫穷时通常辛苦工作,当他们富有时玩得更多。他们所做的是根据他们生活环境,通过他们的行为,这个状态可以改变,否则这个社会就不会长久。

状态模式类图

这里是类图,你可以比较 策略模式,得到两者之间的差别。

 

状态模式Java代码

下面java代码展示了状态模式如果工作。 State classes:

package com.programcreek.designpatterns.state;
 
interface State {
  public void saySomething(StateContext sc);
}
 
class Rich implements State{
  @Override
  public void saySomething(StateContext sc) {
    System.out.println("I'm rick currently, and play a lot.");
    sc.changeState(new Poor());
  }
}
 
class Poor implements State{
  @Override
  public 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 for testing:

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();
  }
}

Result:

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.

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
一天一种设计模式之二-----备忘录模式

一.备忘录模式 备忘录模式属于三种设计模式中的行为型模式(另外两种是创建型模式和结构型模式)。 定义:在不破坏封闭性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这...

tongqu
2016/03/07
104
0
《Artech的WCF技术剖析系列》系列技术文章整理收藏

《Artech的WCF技术剖析系列》系列技术文章整理收藏 WCF技术剖析系列来自博客园的Artech,Artech在这个系列中帮助大家对WCF有更全面的认识。收藏在这里供大家学习参考 1WCF技术剖析之一:通过...

开元中国2015
2015/06/22
24
0
一句话总结23种设计模式则

1. 前言 断断续续写了一段时间的设计模式,终于把经典的23种设计模式全写完了。下面对这些设计模式总结一下。 2. 设计原则 设计原则的介绍 : 设计模式的六大原则 即使我们之前没有专门看过这...

四月葡萄
01/05
0
0
第一章,思想为源.设计模式的概述及分类

一,设计模式概述 关于模式这一概念, 最早出现在城市建筑领域 Christopher Alexander 的一本关于建筑的书(The Timeless Way of Building)。他在书中明确给出了模式的概念: 每一个模式描述了一...

水门-kay
2016/07/23
487
1
小菜学设计模式——设计模式总结之行为型(2)

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/10
137
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部