设计模式(18):状态模式

这篇具有很好参考价值的文章主要介绍了设计模式(18):状态模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

核心

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

结构

  • 环境类(Context):
    • 环境类中维护一个State对象,它定义了当前的状态,并委托当前状态处理一些请求;
  • 抽象状态类(State):
    • 用于封装对象的一个特定状态所对应的行为;
  • 具体状态类(ConcreteState):
    • 实现了抽象状态类,每个具体状态封装了各自状态对应的行为;

场景

  • 电梯的运行
    • 维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态
  • 红绿灯
    • 红灯、黄灯、绿灯
  • 请假审批
  • 企业或政府系统
    • 公文的审批
  • 网购订单状态
    • 下单
    • 已付款
    • 已发货
    • 发货中
    • 已收货

开发中常见的场景

  • 银行系统中账号状态的管理
  • OA系统中公文状态的管理
  • 酒店系统中,房间状态的管理
  • 线程对象各状态之间的切换

举例代码实现

  • 场景:酒店系统中房间的状态变化:

    • 已预定: 已预订状态可以入住,入住后就变成已入住状态;也可以取消预订,取消预订后就变成空闲状态;
    • 已入住: 已入住状态可以退房,退房后变成空闲状态;
    • 空闲: 空闲状态可以预订,预订后变成预订状态;也可以入住,入住后变成已入住状态;
  • 代码实现

  • 抽象状态类(State)

/**
 * 抽象房间状态 接口
 */
public interface State {
	void handle();
}
  • 具体状态类(ConcreteState)
/**
 * 空闲状态
 */
public class FreeState implements State{
	@Override
	public void handle() {
		System.out.println("房间空闲中,可预订。。。。。");
	}	
}
/**
 * 已预定状态
 */
public class BookedState implements State{
	@Override
	public void handle() {
		System.out.println("房间已预订。。。。。");
	}	
}
/**
 * 已入住状态
 */
public class CheckedInState implements State{
	@Override
	public void handle() {
		System.out.println("房间已入住,请勿打扰。。。。。");
	}	
}
  • 环境类(Context)
/**
 * 环境类:
 * 房间对象,持有状态的引用
 */
public class HomeContext {
	private State state;
	/**
	 * 设置状态。。
	 * @param state
	 */
	public void setState(State state){
		System.out.println("修改状态。。");
		this.state=state;
		this.state.handle();		
	}
}
  • 客户端调用
public static void main(String[] args) {
	HomeContext hc=new HomeContext();
	hc.setState(new FreeState());
	hc.setState(new BookedState());
	hc.setState(new CheckedInState());
}



更多设计模式学习:

          设计模式(1):介绍
          设计模式(2):单例模式
          设计模式(3):工厂模式
          设计模式(4):建造者模式
          设计模式(5):原型模式
          设计模式(6):桥接模式
          设计模式(7):装饰器模式
          设计模式(8):组合模式
          设计模式(9):外观模式
          设计模式(10):享元模式
          设计模式(11):适配器模式
          设计模式(12):代理模式
          设计模式(13):模板方法模式
          设计模式(14):命令模式
          设计模式(15):迭代器模式
          设计模式(16):观察者模式
          设计模式(17):中介者模式
          设计模式持续更新中…文章来源地址https://www.toymoban.com/news/detail-845402.html

到了这里,关于设计模式(18):状态模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Gof23设计模式之模板方法模式

    定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模板方法(Template Method)模式包含以下主要角色: 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个

    2024年02月13日
    浏览(56)
  • Gof23设计模式之建造者模式

    建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和

    2024年02月11日
    浏览(49)
  • Gof23设计模式之桥接外观模式

    又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 外观(Facade)模式包含

    2024年02月15日
    浏览(47)
  • Gof23设计模式之单例模式(完整)

    单例模式(Singleton pattern)是Java中最简单的设计模式之一。这种设计模式属于创建型模型,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访

    2024年02月10日
    浏览(53)
  • GOF 23 种设计模式应用场景分析

    本文看下GOF 23 种设计模式应用场景,详细的还是通过文章给出参考链接学习下。 参考这篇文章 。 有几种产品需要创建,比如创建红苹果,青苹果,绿苹果,这些对象通过一个对象就可以。 参考这篇文章 。 有几种产品需要创建,但是每种产品不能简单的通过一个对象来表示

    2024年02月16日
    浏览(46)
  • 创建型模式 (Creational Patterns) 玄子Share 设计模式 GOF 全23种 + 七大设计原则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWLAOFtO-1691793071647)(./assets/%E7%8E%84%E5%AD%90Share%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20GOF%20%E5%85%A823%E7%A7%8D%20+%20%E4%B8%83%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.png)] GoF(Gang of Four)是四位计算机科学家(Erich Gamma、Ri

    2024年02月12日
    浏览(35)
  • 【设计模式——学习笔记】23种设计模式——状态模式State(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    请编写程序完成APP抽奖活动具体要求如下: 假如每参加一次这个活动要扣除用户50积分,中奖概率是10% 奖品数量固定,抽完就不能抽奖 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完,活动的四个状态转换关系图如下 一开始的状态为“不能抽奖”,当扣除50积分

    2024年02月12日
    浏览(49)
  • 设计模式(18):状态模式

    用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 环境类(Context): 环境类中维护一个State对象,它定义了当前的状态,并委托当前状态处理一些请求; 抽象状态类(State): 用于封装对象的一个特定状态所对应的行为; 具体状态类(ConcreteState): 实现了抽象状态类

    2024年04月09日
    浏览(39)
  • C++设计模式_18_State 状态模式

    State和Memento被归为“状态变化”模式。 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。 State Memento

    2024年02月06日
    浏览(37)
  • java 23种设计模式

    1、创建型模式(Creational Patterns) 2、结构型模式(Structural Patterns) 3、行为型模式(Behavioral Patterns) 创建型模式(Creational Patterns):         1、工厂方法模式(Factory Method Pattern)               1.1、简单工厂模式(Simple Factory Pattern)         2、抽象工厂模式(Abstract

    2024年01月22日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包