java设计模式之状态模式
Posted 快乐崇拜234
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java设计模式之状态模式相关的知识,希望对你有一定的参考价值。
正文在下面,先打个广告:
状态模式的定义与特点
对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
模式的结构
状态模式包含以下主要角色。
- 环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。
- 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。
- 具体状态(Concrete State)角色:实现抽象状态所对应的行为。
典型类图为:
demo
以学生成绩为例,每次考完试,都根据成绩修改状态。
0-59:low
60-79: middle
80-100: heigh
状态类:
public interface State
void setScore(int score);
String getName();
int getScore();
三个状态:
public class Low implements State
private int score;
private ScoreContext context;
public Low(int score, ScoreContext context)
this.score = score;
this.context = context;
context.setState(this);
@Override
public void setScore(int score)
StateUtil.modifyState(score, context);
System.out.println("current score:" + score + " State: " + context.getState().getName());
@Override
public String getName()
return "low";
@Override
public int getScore()
return score;
public class Middle implements State
private int score;
private ScoreContext context;
public Middle(int score, ScoreContext context)
this.score=score;
this.context = context;
context.setState(this);
@Override
public void setScore(int score)
StateUtil.modifyState(score, context);
System.out.println("current score:" + score + " State: " + context.getState().getName());
@Override
public String getName()
return "Middle";
@Override
public int getScore()
return score;
public class High implements State
private int score;
private ScoreContext context;
public High(int score, ScoreContext context)
this.score=score;
this.context = context;
context.setState(this);
@Override
public void setScore(int score)
StateUtil.modifyState(score, context);
System.out.println("current score:" + score + " State: " + context.getState().getName());
@Override
public String getName()
return "High";
@Override
public int getScore()
return score;
状态转换工具类
public class StateUtil
public static void modifyState(int score, ScoreContext context)
if (score >= 60 && score < 80)
new Middle(score, context);
else if (score >= 80)
new High(score, context);
else
new Low(score, context);
成绩上下文类
public class ScoreContext
private State state;
public ScoreContext()
new Low(0, this);
public State getState()
return state;
public void setState(State state)
this.state = state;
public void setScore(int score)
state.setScore(score);
测试方法:
public class Main
public static void main(String[] args)
ScoreContext context = new ScoreContext();
context.setScore(20);
context.setScore(70);
System.out.println("=======" + context.getState().getScore());
context.setScore(90);
context.setScore(20);
输出:
current score:20 State: low
current score:70 State: Middle
=======70
current score:90 State: High
current score:20 State: low
以上是关于java设计模式之状态模式的主要内容,如果未能解决你的问题,请参考以下文章