博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行为型模式之二:状态模式
阅读量:6548 次
发布时间:2019-06-24

本文共 1534 字,大约阅读时间需要 5 分钟。

  hot3.png

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

状态模式故事

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

状态模式类图

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

 

状态模式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.

转载于:https://my.oschina.net/markho/blog/498238

你可能感兴趣的文章
centos7安装dhcp服务器并由客户端动态获取IP地址
查看>>
easyui datagrid 表格适应屏幕
查看>>
MongoDB安装
查看>>
rapidjson常见使用示例
查看>>
kafka producer实例及原理分析
查看>>
程控交换机分机同时拨打外线的方法
查看>>
Python 的深浅拷贝 终于明白了
查看>>
应用为王 从Zpad看“中国创造”
查看>>
以DH的方式实现非对称加密
查看>>
avascript实现页面刷新
查看>>
人工智能下的可穿戴设备 如何争夺物联网的入口
查看>>
FBI网站被黑致数据泄露?官方称这根本是个骗局
查看>>
不法分子散播奥运诈骗链接 伪造APP窃取个人信息
查看>>
如何重塑IT部门以适应全新云环境
查看>>
思科尤岱伟:思科安全因“产品组合”与“集成架构”变得不同
查看>>
如何成为一名优秀的软件测试人员
查看>>
Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
查看>>
关于手机等品牌型号搜索与采集的中文分词分离
查看>>
Cocos2D v2.0至v3.x简洁转换指南(二)
查看>>
[ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
查看>>