设计模式之状态模式
2015-10-13 11:52
316 查看
1、核心
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。2、结构
—Context环境类:环境类中维护一个State对象,他是定义了当前的状态—State抽象状态类
—ConcreteState具体状态类:每一个类封装了一个状态对应的行为
3、适用场景
一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
4、代码示例
问题:酒店房间状态:预定、入住、空闲/** * 状态接口 * @author ly1 * */ public interface State { void handle(); }
/** * 空闲状态 * @author ly1 * */ public class FreeState implements State{ @Override public void handle() { System.out.println("房间空闲!可以预定!"); } }
/** * 预定状态 * @author ly1 * */ public class OrderedState implements State{ @Override public void handle() { System.out.println("房间已被预定!可以入住!"); } }
/** * 入住状态 * @author ly1 * */ public class CheckedState implements State{ @Override public void handle() { System.out.println("房间已入住!"); } }
/** * 房间上下文 * @author ly1 * */ public class HomeContext { private State state; public HomeContext(State state) { super(); this.state = state; } public void setState(State state) { this.state = state; } public void request(){ state.handle(); } }
/** * 客户端调用 * @author ly1 * */ public class Client { public static void main(String[] args) { HomeContext context = new HomeContext(new FreeState()); context.request(); context.setState(new OrderedState()); context.request(); context.setState(new CheckedState()); context.request(); } } 结果: 房间空闲!可以预定! 房间已被预定!可以入住! 房间已入住!
相关文章推荐
- MySQL 数据类型以及常用命令
- 拜读了《婆媳关系好坏取决于老公》一文,看似有道理,细读感觉其实应该不是那么回事
- css 微信webui
- .java生成dex文件
- vs中: 错误,未定义的标识符getline 的解决方法
- Dailog开发新方法
- InputStream OutputStream
- QT中给程序加上主界面的图标
- JAVA 几种常见加密算法
- iis6站点标识符修改方法
- border边框线透明
- mysqlbinlog 恢复mysql数据
- android studio 整合百度地图开发
- Win7下IDEA搭建Spark源代码阅读环境。
- Xcode项目上传到git
- Webdriver处理嵌入的iframe
- 5.Python标准库_存储对象 (pickle包,cPickle包)
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- OpenCV - 视频及图像采集
- Layer