java设计模式_状态模式
来源:互联网 发布:淘宝达人好做吗 编辑:程序博客网 时间:2024/05/22 07:08
一、什么是状态模式
State模式也叫状态模式,是行为设计模式的 一种。State模式允许通过改变对象的内部状态 而改变对象的行为,这个对象表现得就好像修改
了它的类一样。
二、状态模式的应用场景
状态模式主要解决的是当控制一个对象状态转 换的条件表达式过于复杂时的情况。把状态的判 断逻辑转译到表现不同状态的一系列类当中,可
以把复杂的判断逻辑简化。
三、状态模式的结构
四、状态模式的角色和职责
Context:用户对象 拥有一个State类型的成员,以标识对象的当前 状态; State:接口或基类
封装与Context的特定状态相关的行为; ConcreteState:接口实现类或子类 实现了一个与Context某个状态相关的行为。
//示例1:public class Person { private int hour; public void setHour(int hour) { this.hour = hour; } public int getHour() { return hour; } public void doSomething() { if(hour == 7) { System.out.println("吃早餐"); } else if(hour == 12) { System.out.println("吃中饭"); } else if(hour == 18) { System.out.println("吃晚饭"); } }}public class MainClass { public static void main(String[] args) { Person person = new Person(); person.setHour(7); person.doSomething(); person.setHour(12); person.doSomething(); person.setHour(18); person.doSomething(); }}//吃早餐//吃中饭//吃晚饭////示例2:public abstract class State { public abstract void doSomething();}public class MState extends State { @Override public void doSomething() { System.out.println("吃早餐"); }}public class LState extends State { @Override public void doSomething() { System.out.println("吃中饭"); }}public class SState extends State { @Override public void doSomething() { System.out.println("吃晚饭"); }}public class NoState extends State { @Override public void doSomething() { System.out.println("未定义"); }}public class Person { private int hour; private State state; public void setHour(int hour) { this.hour = hour; } public int getHour() { return hour; } public void doSomething() { if(hour == 7) { state = new MState(); state.doSomething(); } else if(hour == 12) { state = new LState(); state.doSomething(); } else if(hour == 18) { state = new SState(); state.doSomething(); } else { state = new NoState(); state.doSomething(); } }}public class MainClass { public static void main(String[] args) { Person person = new Person(); person.setHour(7); person.doSomething(); person.setHour(12); person.doSomething(); person.setHour(18); person.doSomething(); person.setHour(8); person.doSomething(); }}//吃早餐//吃中饭//吃晚饭//未定义//示例3:public abstract class State { public abstract void doSomething(Person person);}public class MState extends State { @Override public void doSomething(Person person) { if(person.getHour() == 7) System.out.println("吃早餐"); else { person.setState(new LState()); person.doSomething(); } }}public class LState extends State { @Override public void doSomething(Person person) { if(person.getHour() == 12) System.out.println("吃中饭"); else { person.setState(new SState()); person.doSomething(); } }}public class SState extends State { @Override public void doSomething(Person person) { if(person.getHour() == 18) System.out.println("吃晚饭"); else { person.setState(new NoState()); person.doSomething(); } }}public class NoState extends State { @Override public void doSomething(Person person) { System.out.println("未定义"); }}public class Person { private int hour; private State state = new MState(); public void setState(State state) { this.state = state; } public void setHour(int hour) { this.hour = hour; } public int getHour() { return hour; } public void doSomething() { state.doSomething(this); }}public class MainClass { public static void main(String[] args) { Person person = new Person(); person.setHour(7); person.doSomething(); person.setHour(12); person.doSomething(); person.setHour(18); person.doSomething(); person.setHour(8); person.doSomething(); }}//吃早餐//吃中饭//吃晚饭//未定义
0 0
- java设计模式_状态模式
- 设计模式_状态模式(Java)
- Java设计模式_(行为型)_状态模式
- 设计模式_状态模式
- 设计模式_状态模式
- 设计模式_状态模式
- 设计模式_状态模式
- 设计模式_状态模式
- 设计模式_状态模式
- 设计模式_状态设计模式
- Unity_设计模式_状态模式_05
- 设计模式_状态模式(23)
- Java设计模式_行为型_状态模式_工作还是休息
- Java设计模式_创建型_原型模式_复制对象及状态
- java设计模式-状态模式
- java设计模式---状态模式
- java设计模式---状态模式
- java设计模式---状态模式
- 【总结】服务器上配置:Ubuntu14.04+cuda7.5+caffe+远程链接
- 链表常见题总结一
- Linux---Linux限制网络带宽的占用
- hdu 5818 Joint Stacks 优先队列(多校)
- css3选择器总结
- java设计模式_状态模式
- sem_open、sem_close、sem_unlink
- 工厂模式
- svn 设置用户组
- 快速幂
- 提前定义及对象构造顺序
- 指针和引用的区别
- 聊天机器人中对话模板的高效匹配方法
- 基本选择器使用一