标签: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
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()
标签:style blog http color strong ar 2014 问题
原文地址:http://www.cnblogs.com/xinye/p/3908989.html