设计模式之状态模式

来源:互联网 发布:51单片机课后答案 编辑:程序博客网 时间:2024/05/29 18:23

1、核心

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。

2、结构

—Context环境类:环境类中维护一个State对象,他是定义了当前的状态
—State抽象状态类
—ConcreteState具体状态类:每一个类封装了一个状态对应的行为
状态模式——结构图

3、适用场景

  1. 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
  2. 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

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
原创粉丝点击