码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-状态模式

时间:2014-09-07 22:21:45      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   io   使用   div   cti   sp   

状态模式是针对系统的状态转换的,其主要的定义如下:

状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类。

为了方便状态转移 我们为状态定义一个通用的接口,然后每一种状态都实现这个接口,而在系统类中,通过构造函数,将系统本身传入状态类中,这样,每一种状态的改变,都可以在自己类的内部完成,同时提高了可扩展性:

public interface State{
    public void des();
    public void action();
}
public class State1 implements State{
    Sys sys;
    public Sate1(Sys s)
    {
        this.sys=sys;
    }
    public void des(){
        .../ implements
    }
    public void action(){
        .../ change the state
        sys.setState(s.getState2());
    }
}
public class State2 implements State{
    Sys sys;
    public Sate2(Sys s)
    {
        this.sys=sys;
    }
    public void des(){
        .../ implements
    }
    public void action(){
        .../ change the state
        sys.setState(s.getState1());
    }
}
public class Sys {
    private State1 state1;
    private State2 state2;
    private State state;//record the system‘s state
    ....//state1 & state2‘s setter & getter
    public Sys(State state)
    {
        this.state=state;
    }
    public void setState(State state)
    {    
        this.state=state;
    }    
    public void aciton()
    {
        state.action();
    }
}

虽然在实现上 状态模式和策略模式以及模板方法有些相似 但是几个设计模式完全不一样,策略模式是将可以互换的行为封装起来,然后使用委托的方法决定使用哪一个行为,模板方法则是由子类决定具体的如何实现算法中的某些步骤,而算法的流程是给定的,而状态模式则封装的是基于状态的行为,并将行为委托到当前状态,由当前状态来决定具体行为。

设计模式-状态模式

标签:des   style   blog   color   io   使用   div   cti   sp   

原文地址:http://www.cnblogs.com/xtestw/p/3960817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!