`
smartwgd
  • 浏览: 53921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

State状态模式

阅读更多

参考于下面的链接:
http://www.jdon.com/designpatterns/designpattern_State.htm
http://blog.csdn.net/qutr/archive/2006/08/01/1007617.aspx

State模式的定义 : 不同的状态,不同的行为;或者说,每个状态有着相应的行为.

何时使用  State模式在实际使用中比较多,适合"状态的切换".

来段代码:

//先来一个状态:
package State;

public abstract class State
{
    
    /** *//** Creates a new instance of State */
    public State() {
    }
    
    public abstract void opration(Context context);
}//end class State

//在来两个具体的State:
public class ConcreteStateA extends State
{
    
    /** *//** Creates a new instance of ConcreteStateA */
    public ConcreteStateA() {
    }

    public void opration(Context context)
    {
        System.out.println("The Concrete A");
        context.setSate(new ConcreteStateB());
    }//end opration()
    
    public static ConcreteStateA getInstance()
    {
        return new ConcreteStateA();
    }//end getInstance()
}

public class ConcreteStateB extends State
{
    
    /** *//** Creates a new instance of ConcreteStateB */
    public ConcreteStateB() {
    }

    public void opration(Context context)
    {
        System.out.println("The Concrete B");
        context.setSate(new ConcreteStateA());
    }//end opration()
    
    public static ConcreteStateB getInstance()
    {
        return new ConcreteStateB();
    }//end getInstance()
    
}//end class ConcreteStateB

//来一个场景:
public class Context
{
    private State state;
    /** *//** Creates a new instance of Context */
    public Context() {
    }
    
    public void setSate(State stat)
    {
        state = stat;
    }//end setState()
    
    public void operation()
    {
        state.opration(this);
    }//end operation()
    
}//end class Context

//怎样调用:
public static void main(String[] args)
{
		Context con = new Context();
		con.setSate(ConcreteStateA.getInstance());
		con.operation();
		con.operation();
}//end main()
 

以上代码摘自上面介绍的blog中,不过有部分改动。下面是UML图 也是盗链的。。。。。

State模式

分享到:
评论
4 楼 dafei2599 2008-05-13  
学习!
却是不知道应该如何应用!
3 楼 aninfeel 2008-05-07  
和某个好像叫fly的模式很像啊,就是执行者不保存状态,也不是做真正的执行,而是只是调用某个对象(相当于现在的state)的某个方法。
2 楼 smartwgd 2008-05-07  
现在只是学习,而工作中 还没有应用到 呵呵。努力努力
1 楼 coolzyt 2008-05-07  
状态模式常用于编译器中,构造有限状态机

相关推荐

Global site tag (gtag.js) - Google Analytics