设计模式之状态模式
来源:互联网 发布:51单片机课后答案 编辑:程序博客网 时间:2024/05/29 18:23
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(); }}结果:房间空闲!可以预定!房间已被预定!可以入住!房间已入住!
0 0
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 【设计模式】之状态模式
- ajax异步调用的底层实现
- Dailog开发新方法
- JAVA 几种常见加密算法
- 黑马程序员_JAVA异常类的笔记
- InputStream OutputStream
- 设计模式之状态模式
- Xcode7 无法请求到数据, iOS9无法请求HTTP类型的数据
- iOS判断键盘弹出和隐藏
- Android 事件总线OTTO用法快速入门
- UITextView的超链接问题
- Linux配置时间服务器
- iOS 判断详细的网络类型
- MySQL 数据类型以及常用命令
- C#.NET中使用GUID