文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:39
字数 333
阅读 35
收藏 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
一句话总结23种设计模式则

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

四月葡萄
01/05
0
0
小菜学设计模式——设计模式总结之行为型(2)

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

learn_more
2015/07/10
137
0
第一章,思想为源.设计模式的概述及分类

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

水门-kay
2016/07/23
487
1
PHP之设计模型分类(一)

经典的《设计模式》一书归纳出23种设计模式,本文按《易学设计模式》一书归纳分类如下: 1.创建型模式 前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象...

peasant
2016/04/29
81
0

没有更多内容

加载失败,请刷新页面

加载更多

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
4
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
4
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部