写点什么

Java 状态模式 (State),马哥 linux2020 全套视频下载

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:799 字

    阅读完需:约 3 分钟

if(住进房间){


入住操作;


state="已入住";


}else if(取消预订){


取消操作;


state="空闲";


}


}


这种实现中 if 语句过多,不便于维护修改。这时我们可以考虑用状态模式来实现。


状态模式实


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码




类图结构


核心


用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题


| 角色 | 说明 |


| --- | :-- |


| Context 环境类 | 环境类中维护一个 State 对象,他是定义了当前的状态。 |


| State | 具体状态类 |


| ConcreteState 具体状态类 | 每一个类封装了一个状态对应的行为 |


实现代码

State


/**


  • State 接口

  • @author 波波烤鸭

  • @email dengpbs@163.com


*/


public interface State {


void handle();


}


State 实现类


/**


  • 已预订状态

  • @author 波波烤鸭

  • @email dengpbs@163.com


*/


public class BookedState implements State {


@Override


public void handle() {


System.out.println("房间已预订!别人不能定!");


}


}


/**


  • 已入住状态

  • @author 波波烤鸭

  • @email dengpbs@163.com


*/


public class CheckedInState implements State {


@Override


public void handle() {


System.out.println("房间已入住!请勿打扰!");


}


}


/**


  • 空闲状态

  • @author 波波烤鸭

  • @email dengpbs@163.com


*/


public class FreeState implements State {


@Override


public void handle() {


System.out.println("房间空闲!!!没人住!");


}


}


房间对象


/**


  • 房间对象

  • @author 波波烤鸭

  • @email dengpbs@163.com


*/


public class HomeContext {


//如果是银行系统,这个 Context 类就是账号。根据金额不同,切换不同的状态!


private State state;


public void setState(State s){


System.out.println("修改状态!");


state = s;


state.handle();


}


}


client


public class Client {


public static void main(String[] args) {


// 获取房间对象


HomeContext ctx = new HomeContext();


// 设置房间状态


ctx.setState(new FreeState());

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Java状态模式(State),马哥linux2020全套视频下载