状态模式
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。
适用性
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为
2.一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常有多个操作包含这一相同的条件结构。
状态模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其它的对象而独立变化。
参与者
1.Context
定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态
2.State
定义一个接口封装与context的一个特定状态相关的行为:
3.ConcreteStateSubClasses
每一子类实现一个与Context的一个状态相关的行为
类图
一个小例子
1.Context
public class Context {
private Weather weather;
public Weather getWeather() {
return weather;
}
public void setWeather(Weather weather) {
this.weather = weather;
}
public void weatherMessage() {
weather.infoWeather();
}
}
2.State
public interface Weather {
String getWeather();
}
3.ConcreteStateSubClasses
public class Rain implements Weather {
@Override
public String getWeather() {
return "下雨";
}
}
public class Sunshine implements Weather {
@Override
public String getWeather() {
return "阳光";
}
}
Test
ublic class Test {
public static void main(String[] args) {
Context c1 = new Context();
c1.setWeather(new Rain());
System.out.println(c1.weatherMessage());
System.out.println("=====================");
Context c2 = new Context();
c2.setWeather(new Sunshine());
System.out.println(c2.weatherMessage());
}
}
result:
下雨
=====================
阳光
参考资料
1.http://www.cnblogs.com/java-my-life/archive/2012/06/08/2538146.html