试谈java设计模式之State.doc

试谈java设计模式之State.doc

ID:51950790

大小:23.50 KB

页数:5页

时间:2020-03-20

试谈java设计模式之State.doc_第1页
试谈java设计模式之State.doc_第2页
试谈java设计模式之State.doc_第3页
试谈java设计模式之State.doc_第4页
试谈java设计模式之State.doc_第5页
资源描述:

《试谈java设计模式之State.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、java设计模式之StateState的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 何时使用? State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 不只是根据状态,也有根据属性.如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现频率比较高,我们经常会在一个数据表的尾部,加上property属性含义的字段,用以标识

2、记录中一些特殊性质的记录,这种属性的改变(切换)又是随时可能发生的,就有可能要使用State. 是否使用? 在实际使用,类似开关一样的状态切换是很多的,但有时并不是那么明显,取决于你的经验和对系统的理解深度. 这里要阐述的是"开关切换状态" 和" 一般的状态判断"是有一些区别的, " 一般的状态判断"也是有 if..elseif结构,例如:     if (which==1) state="hello";     else if (which==2) state="hi";     else

3、 if (which==3) state="bye"; 这是一个 " 一般的状态判断",state值的不同是根据which变量来决定的,which和state没有关系.如果改成:     if (state.euqals("bye")) state="hello";     else if (state.euqals("hello")) state="hi";     else if (state.euqals("hi")) state="bye"; 这就是 "开关切换状态",是将stat

4、e的状态从"hello"切换到"hi",再切换到""bye";在切换到"hello",好象一个旋转开关,这种状态改变就可以使用State模式了. 如果单纯有上面一种将"hello"-->"hi"-->"bye"-->"hello"这一个方向切换,也不一定需要使用State模式,因为State模式会建立很多子类,复杂化,但是如果又发生另外一个行为:将上面的切换方向反过来切换,或者需要任意切换,就需要State了. 请看下例:public class Context{   private Colo

5、r state=null;   public void push(){     //如果当前red状态 就切换到blue     if (state==Color.red) state=Color.blue;     //如果当前blue状态 就切换到green     else if (state==Color.blue) state=Color.green;     //如果当前black状态 就切换到red     else if (state==Color.black) state=

6、Color.red;     //如果当前green状态 就切换到black     else if (state==Color.green) state=Color.black;          Sample sample=new Sample(state);     sample.operate();   }   public void pull(){     //与push状态切换正好相反     if (state==Color.green) state=Color.blue;  

7、   else if (state==Color.black) state=Color.green;     else if (state==Color.blue) state=Color.red;     else if (state==Color.red) state=Color.black;     Sample2 sample2=new Sample2(state);     sample2.operate();    } }   在上例中,我们有两个动作push推和pull拉,这两个

8、开关动作,改变了Context颜色,至此,我们就需要使用State模式优化它. 另外注意:但就上例,state的变化,只是简单的颜色赋值,这个具体行为是很简单的,State适合巨大的具体行为,因此在,就本例,实际使用中也不一定非要使用State模式,这会增加子类的数目,简单的变复杂. 例如: 银行帐户, 经常会在Open 状态和Close状态间转换. 例如: 经典的TcpConnection, Tcp的状态有创建 侦听 关闭三个,并且反复转换,其创建 侦听 关闭

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。