状态模式

栏目: 后端 · 发布时间: 5年前

内容简介:定义电梯接口实现书写场景类

模拟电梯

定义电梯接口

public interface ILift{
    // 开门
    public void open();
    // 关门
    public void close();
    // 能运行
    public void run();
    // 停
    public void stop();
}

实现

public class Lifi implements ILift{
    // 关闭
    public void close(){
        // 关门
    }
    // 开门
    public void open(){
        // 开门
    }
    // 运行
    public void run(){
        // 运行
    }
    // 停止
    public void stop(){
        // 停止
    }
}

书写场景类

public class Client{
    public static void main(String[] args){
        ILift lift = new Lift();
        // 开门
        lift.open();
        // 关门
        lift.close();
        // 运行
        lift.run();
        // 停止
        lift.stop();
    }
}

更改

目前不清楚电梯的状态,所以增加电梯的状态

public interface ILift{
    // 四个状态
    // 开门
    public final static int OPENING_STATE = 1;
    // 关门
    public final static int CLOSEING_STATE = 2;
    // 运行
    public final static int RUNNING_STATE = 3;
    // 停止
    public final static int STOPPING_STATE = 4;
    // 设置状态
    public void setState(int state);
    // 下方相同
}
// 实现类
public class Lift implements ILift{
    private int state;
    public void setState(int state){
        this.state = state;
    }
    // 当电梯门关闭
    public void close(){
        // 关闭
        switch(this.state){
            case OPENING_STATE; // 关门
            this.closeWithoutLogic();
            // 修改状态
        }
    }
    // 下方同理
}

修改

对电梯的状态进行封装,当调用的时候,直接自动改变电梯的状态。

即,迪米特法则

即,外界不需要知道电梯的状态,为一个封装好的。

public abstract class LiftState{
    // 定义环境角色
    protected Context context;
    // 设置状态
    public void setContext(Context _context){
        this.context = _context;
    }
    // 开门
    public abstract void open();
    // 关门
    public abstract void close();
    // 运行
    public abstract void run();
    // 停
    public abstract void stop();
}

开门状态

public class OpenningState extends LiftState{
    // 关门
    @Override
    public void close(){
        // 状态更改
        super.context.setLiftState(Context.closeingState);
        // 委托执行
        super.context.getLiftState().close();
    }
    // 打开电梯门
    @Override
    public void open(){
        // 开门
    }
    // 运行
    @Override
    public void run(){
        // 门开,禁止运行
    }
    // 关门
    @Override
    public void stop(){
        // 开门的状态即停止
    }
}
// 环境类,用于封装当前电梯的状态
public class Context{
    // 定义电梯状态
    public final static OpenningState openningState = new OpenningState();
    // 剩下三个状态相同
    // 当前状态
    private LiftState liftState;
    // 获得状态
    public LiftState getLiState(){
        return liftState;
    }
    // 设置状态
    public LiftState setLiftState(LiftState liftState){
        this.liftState = liftState;
        // 通知到当前的状态
        this.liftState.setContext(this);
    }
}

剩下的几个相同

// 书写场景类
public class Client{
    public static void main(String[] args){
        // 此时定义一个电梯的状态
        Context context = new Context();
        // 此时电梯进入关闭状态
        // 将关闭状态,保存进入context中
        // 进行通知,将当前状态的父类设置为context
        context.setLiFtState(new ClosingState());
        // 代执行ClosingState
        context.open();
        // 发生关闭状态的时候,
        context.close();
        context.run();
        context.stop();
    }
}

总结

状态模式的核心在于封装,将对象的状态进行封装。

在于通知,当状态发生改变的时候,进行通知。


以上所述就是小编给大家介绍的《状态模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机组成(第 6 版)

计算机组成(第 6 版)

Andrew S. Tanenbaum、Todd Austin / 刘卫东、宋佳兴 / 机械工业出版社 / 2014-8-19 / CNY 99.00

本书采用结构化方法来介绍计算机系统,书的内容完全建立在“计算机是由层次结构组成的,每层完成规定的功能”这一概念之上。作者对本版进行了彻底的更新,以反映当今最重要的计算机技术以及计算机组成和体系结构方面的最新进展。书中详细讨论了数字逻辑层、微体系结构层、指令系统层、操作系统层和汇编语言层,并涵盖了并行体系结构的内容,而且每一章结尾都配有丰富的习题。本书适合作为计算机专业本科生计算机组成与结构课程的教......一起来看看 《计算机组成(第 6 版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具