设计模式(二十)----- 状态模式(State)----(JAVA版)

状态模式

    状态模式,又称状态对象模式(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

2.http://rainbowj234.diandian.com/post/2011-11-20/6961675

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值