首页 > 代码库 > State状态设计模式
State状态设计模式
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 @Override10 public void service() {11 System.out.println(getClass().getSimpleName() + " service()");12 13 }14 15 @Override16 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 @Override10 public void service() {11 System.out.println(getClass().getSimpleName() + " service()");12 13 }14 @Override15 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 @Override10 public void service() {11 System.out.println(getClass().getSimpleName() + " service()");12 13 }14 @Override15 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 state17 */18 public void changeState(IState state){19 this.state = state;20 }21 /**22 * 可以执行的动作123 */24 public void exec(){25 state.call();26 state.service();27 }28 /**29 * 可以执行的操作230 */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()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。