状态模式

来源:互联网 发布:vb调用大漠插件 编辑:程序博客网 时间:2024/05/16 11:54

1.状态模式的定义

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类

2.状态模式的UML图


3.代码实现

public interface State{    public void handle(String param);}public class ConreteStateA implements State{  public void handle(String param){         System.out.println(param));   }}public class ConreteStateB implements State{   public void handle(String param){         System.out.println(param));   }}public class Context{   private State state;   public void setState(State state){        this.state=state;   }   public State getState(){       return this.state;   }      public void request(String param{       this.state.handle(param);   }  }public class Client{   public static void main(String[] args){      int i=0;        State state=null      if(i==0){          state=new ConreteStateA ();      }else if(i==1){          state=new ConreteStateB ();      }      Context context=new Context();      context.setState(state);      context.request("11111");   }}


状态模式与策略模式的UML一样,但是两者强调的东西是不一样的。

状态模式强调的是行为的平行性,所谓平行性是指在各个状态的行为所处的层次是一样的,相互是独立的、没有关联的,根据不同的状态来决定到底走平行线的哪一条。行为是不同的,当然对应的实现也是不同的,相互之间是不可替换的。

策略模式强调的是行为的平等性,所谓平等性是指大家是同一行为的不同描述或实现,因此在同一行为发送变化的时候,可以根据条件挑选任何一个实现来进行相应的处理,平等性强调的是可替换性。

平行性如下图

平等性如下图:


4.状态模式的本质根据状态来选择分离和实现行为

原创粉丝点击