您的位置:首页 > 编程语言 > Java开发

java设计模式----状态模式

2016-02-26 10:40 525 查看
 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。

策略模式和状态模式有点相似,区别就是状态模式是行为改变状态,主要在于状态改变行为的应用场景,而策略模式则是采用哪种算法,让Context去实现哪种算法,决定权在于客户端。[b]状态模式的行为是平行的,不可相互替换的;而策略模式的行为是平等性的,是可以相互替换的。[/b]

主要有三个角色:

环境角色(Context):保留客户端所需要的一些接口,并保留一个具体状态类的实例。

package design.state;

public class Context {
private State state;

public void setState(State state) {
this.state = state;
}
//定义客户端调用接口
public void request(String para){
state.handle(para);
}
}


  

抽象状态角色(State):作为一个接口,封装环境对象的一个特定的状态所对应的行为。

package design.state;

public interface State {
public void handle(String para);

}


  

具体状态角色(ConcreteState):实现具体的接口定义行为。

package design.state;

public class ConcreteStateA implements State{

@Override
public void handle(String para) {
System.out.println("ConcreteStateA handle:"+para);
}

}


  

package design.state;

public class ConcreteStateB implements State{

@Override
public void handle(String para) {
System.out.println("ConcreteStateB handle:"+para);
}

}


测试

package design.state;

public class Client {
public static void main(String[] args) {
//创建状态
State state=new ConcreteStateA();
State state1=new ConcreteStateB();
//创建环境
Context context=new Context();
//设置状态
context.setState(state);
//请求
context.request("test");
//设置状态
context.setState(state1);
//请求
context.request("test");
}

}


  

结果

ConcreteStateA handle:test
ConcreteStateB handle:test


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: