2008-05-07
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图 也是盗链的。。。。。
评论
aninfeel
2008-05-07
和某个好像叫fly的模式很像啊,就是执行者不保存状态,也不是做真正的执行,而是只是调用某个对象(相当于现在的state)的某个方法。
smartwgd
2008-05-07
现在只是学习,而工作中 还没有应用到 呵呵。努力努力
coolzyt
2008-05-07
状态模式常用于编译器中,构造有限状态机
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 2009 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
我的相册
观察者模式原型.png
共 4 张
共 4 张
最近加入圈子
最新评论
-
我的everNote 天天学习站 ...
可以看看这个 http://xbeta.info/evernote-31.htm ...
-- by smartwgd -
我的everNote 天天学习站 ...
不错。。。我一直想想找个很好的记录学习日志的地方,都不是很方便。最近直接在豆瓣日 ...
-- by liusu -
我的everNote 天天学习站 ...
jmx 我这几天正在弄
-- by spyker -
Command命令模式
struts的action应该是基于请求驱动的MVC框架, webwork/xw ...
-- by darkjune -
Command命令模式
书里面这个图看起来很眼熟
-- by leisure






评论排行榜