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

State状态设计模式

时间:2014-08-13 01:00:04      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   strong   ar   2014   问题   

1、状态模式:改变对象的行为

一个用来改变类的(状态的)对象。

2:问题:当你自己实现 State 模式的时候就会碰到很多细节的问题,你必须根据自己的需要选择合适的实现方法,

比如用到的状态(State)是否要暴露给调用的客户,以及如何使状态发生变化

用于改变状态的机制可能很简单也可能很复杂-比如状态机(State Machine)

3、代理(Proxy)设计模式实际上是状态设计模式的一个特例

4、类图以及UML(astah/jude)下载地址 : http://pan.baidu.com/s/1o60VC1O

bubuko.com,布布扣

5、实现实例

状态公共接口

 1 package com.xinye.test.state;
 2 /**
 3  * 所有的状态的通用接口
 4  * @author 
 5  *
 6  */
 7 public interface IState {
 8     void service();
 9     void call();
10 }

第一种状态

 1 package com.xinye.test.state;
 2 /**
 3  * 第一种状态
 4  * @author 
 5  *
 6  */
 7 public class FirstState implements IState {
 8 
 9     @Override
10     public void service() {
11         System.out.println(getClass().getSimpleName() + " service()");
12 
13     }
14 
15     @Override
16     public void call() {
17         System.out.println(getClass().getSimpleName() + " call()");
18     }
19 
20 }

第二种状态

 1 package com.xinye.test.state;
 2 /**
 3  * 第二种状态
 4  * @author 
 5  *
 6  */
 7 public class SecondState implements IState {
 8 
 9     @Override
10     public void service() {
11         System.out.println(getClass().getSimpleName() + " service()");
12 
13     }
14     @Override
15     public void call() {
16         System.out.println(getClass().getSimpleName() + " call()");
17     }
18 
19 }

第三种状态

 1 package com.xinye.test.state;
 2 /**
 3  * 低三种状态
 4  * @author
 5  *
 6  */
 7 public class ThirdState implements IState {
 8 
 9     @Override
10     public void service() {
11         System.out.println(getClass().getSimpleName() + " service()");
12 
13     }
14     @Override
15     public void call() {
16         System.out.println(getClass().getSimpleName() + " call()");
17     }
18 
19 }

状态设计模式的实现

 1 package com.xinye.test.state;
 2 /**
 3  * 状态设计模式的实现
 4  * @author
 5  *
 6  */
 7 public class Creature {
 8     
 9     private IState state ;
10     
11     public Creature(IState state){
12         this.state = state;
13     } 
14     /**
15      * 改变状态
16      * @param state
17      */
18     public void changeState(IState state){
19         this.state = state;
20     }
21     /**
22      * 可以执行的动作1
23      */
24     public void exec(){
25         state.call();
26         state.service();
27     }
28     /**
29      * 可以执行的操作2
30      */
31     public void say(){
32         state.service();
33         state.call();
34     }
35     
36 }

客户端代码

 1 package com.xinye.test.state;
 2 /**
 3  * 客户端代码
 4  * @author
 5  *
 6  */
 7 public class Client {
 8     public static void main(String[] args) {
 9         Creature c = new Creature(new FirstState());
10         c.exec();
11         c.say();
12 
13         System.out.println("---------------------------------");
14         c.changeState(new SecondState());
15         c.exec();
16         c.say();
17         
18         System.out.println("---------------------------------");
19         c.changeState(new ThirdState());
20         c.exec();
21         c.say();
22     }
23 }

 执行结果

FirstState call()
FirstState service()
FirstState service()
FirstState call()
---------------------------------
SecondState call()
SecondState service()
SecondState service()
SecondState call()
---------------------------------
ThirdState call()
ThirdState service()
ThirdState service()
ThirdState call()

State状态设计模式,布布扣,bubuko.com

State状态设计模式

标签:style   blog   http   color   strong   ar   2014   问题   

原文地址:http://www.cnblogs.com/xinye/p/3908989.html

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