Java设计模式之二十三(状态模式)
来源:互联网 发布:小学网络辅导班 编辑:程序博客网 时间:2024/05/20 11:24
一、什么是状态模式
State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。
二、状态模式的应用场景
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。
三、状态模式的结构
四、状态模式的角色和职责
Context:用户对象拥有一个State类型的成员,以标识对象的当前状态;
State:接口或基类封装与Context的特定状态相关的行为;
ConcreteState:接口实现类或子类实现了一个与Context某个状态相关的行为。
代码实现:
Context:
package com.qianyan.ex;public class Person {//吃饭时间private int hour;//状态引用private State state;public Person() {state = new MState();}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}public State getState() {return state;}public void setState(State state) {this.state = state;}public void doSomething() {state.doSomething(this);this.state = new MState();}}
State:
package com.qianyan.ex;public abstract class State {public abstract void doSomething(Person person);}
ConcreteState:
package com.qianyan.ex;//早饭public class MState extends State {@Overridepublic void doSomething(Person person) {if(person.getHour() == 7)System.out.println("吃早饭");else {person.setState(new LState());person.doSomething();}}}
package com.qianyan.ex;//午饭public class LState extends State {@Overridepublic void doSomething(Person person) {if(person.getHour() == 12)System.out.println("吃中饭");else{person.setState(new SState());person.doSomething();}}}
package com.qianyan.ex;//晚饭public class SState extends State {@Overridepublic void doSomething(Person person) {if(person.getHour() == 18)System.out.println("吃晚饭");else{person.setState(new NoState());person.doSomething();}}}
package com.qianyan.ex;public class NoState extends State {@Overridepublic void doSomething(Person person) {System.out.println(person.getHour() + "未定义");}}
测试类:
package com.qianyan.ex;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(20);person.doSomething();person.setHour(7);person.doSomething();person.setHour(18);person.doSomething();}}
测试结果:
吃早饭吃中饭吃晚饭20未定义吃早饭吃晚饭
- Java设计模式之二十三(状态模式)
- (二十三)Java设计模式之访问者模式
- 二十三种设计模式之状态模式
- 设计模式观后(c++还原之二十三 状态模式)
- (二十二)Java设计模式之状态模式
- 设计模式之状态模式(二)
- 二十三种设计模式之行为型模式之状态模式
- 二十三 设计模式之桥梁模式
- JAVA设计模式(二十三)----策略模式
- C++设计模式之二十三:Visitor(访问者模式)
- 设计模式(c++)笔记之二十三(Interpreter模式)
- 行为型:设计模式之访问者模式(二十三)
- Java设计模式(二十三)----解释器模式
- JAVA--解释器模式(Interpreter)--设计模式二十三
- 设计模式--(二十三)
- 状态模式(state) -- (模式之十三)
- Java开发中的23种设计模式之二十三:解释器模式(Interpreter)
- 二十三种设计模式(java版)之Iterator
- pjsip学习 ------ 一
- 交换机的配置模式
- (单纯的懒操作) a simple problem with integers (P3468)
- nginx+tomcat+memcached组建web服务器负载均衡
- GO 语言调用C函数(实例)
- Java设计模式之二十三(状态模式)
- linux命令行中通过ssh复制文件(scp)到远程服务器
- Linux下C++的man安装及使用方法
- shopxp网上购物系统 v7.4 SQL注入漏洞
- 抽象类是否可继承实体类
- javascript 对象继承
- 【视频】用WIZ110SR实现“网络收音机”
- Jenkins持续集成服务器配置Linux(Ubuntu)
- shopxp网上购物系统 v7.4存在SQL注入漏洞