行为型模式之二:状态模式
行为型模式之二:状态模式
刀狂剑痴 发表于2年前
行为型模式之二:状态模式
  • 发表于 2年前
  • 阅读 30
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

状态模式故事

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

状态模式类图

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

 

状态模式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
博文 111
码字总数 82582
×
刀狂剑痴
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: