`

java状态模式

    博客分类:
  • Java
阅读更多

一、定义:
1,状态模式允许一个"对象"在其内部状态改变的时候改变其行为。
2,状态模式的角色:
抽象状态,具体状态(一般是几个,每一个状态下有不同的行为,),环境(context)角色(就是对象,什么对象的状态,一般该对象要初始化一个状态,还有改变状态,还有该状态下的行为)

我们打篮球的时候运动员可以有正常状态,不正常状态,和超常状态,现在我们就以我们打篮球时候投篮时候的状态来举例子,

首先我们抽象出状态,以及该状态下的行为,
interface State{
    public void shot();
}
然后实现具体状态,我们这里有三个,三种状态三种行为。
不正常
public class NonormalState implements State{
    public void shot(){
    System.out.println("今天你投篮十中一");
}
}
正常:
public class NormalState implements State{
    public void shot(){
    System.out.println("今天你投篮十中五");
}
}
超常:
public class SuperState implements State{
    public void shot(){
    System.out.println("今天你投篮十中十");
}
}
这个时候我们来一个环境,一个运动员,正常情况下是正常状态
public class Player{
         private State state=new NormalState();
public void setState(State state){
      this.state=state;
}
      public void shot(){
            state.shot();//这里我感觉是创建型模式的适配器模式,对象适配器。应该就是这样,
    }
}
测试这个例子
public class StateTest
{
   public static void main(String[] args){
Player player=new Player();
player.shot();//正常下投篮
player.setState(new NonormalState());
player.shot();不正常下投篮
player.setState(new SuperState());
player.shot();超常下投篮
}
}

   使用状态模式的好处是每个状态被封装到一个独立的类中,这些类可以独立变化,而主对象中没有繁琐的swich-case语句,并且添加新的状态非常容易,只需要从State派生一个新类即可。

原文:http://hi.baidu.com/kelongxhu/blog/item/f676894ef5f6ec01b3de05bd.html

分享到:
评论
2 楼 woshiwxw765 2011-03-29  
sun201200204 写道
你这个是状态模式吗?你的内部状态呢?状态是可以自己设置的?

同意楼上,只能说明楼主对状态模式的认识目前来说只是入门阶段,我觉得状态模式最经典的地方就是将状态的转换过程放到了子类里面而对客户端解耦。
1 楼 sun201200204 2010-01-28  
你这个是状态模式吗?你的内部状态呢?状态是可以自己设置的?

相关推荐

Global site tag (gtag.js) - Google Analytics