状态模式 设计模式

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。

有时,当对象的内部状态更改时,您需要更改其行为。 State设计模式允许执行此操作。 您可以通过创建代表不同状态和功能的单独类来获得此功能。 当然,这些类必须从一个抽象类继承或实现一个接口。

当需要在运行时通过输入某些State基类的不同子类来更改对象的状态时,可以使用State设计模式。 这种情况同时是有利和不利的,因为我们有明确的,独立的州类别,并带有某种逻辑,而另一方面,类别的数量却在增加。

让我们考虑这个例子。 每年有四个季节:冬天,春天,夏天和秋天。每个季节都有其自己的顺序,例如春天在冬天之后,夏天在春天之后等等。

季节的基本状态界面:

public interface Season {public void theSeason(SeasonContext context);
}

实现Season接口的状态类:

public class Winter implements Season {@Overridepublic void theSeason(SeasonContext context) {System.out.println("Winter is now.");context.setSeason(new Spring());}}

Spring班:

public class Spring implements Season {@Overridepublic void theSeason(SeasonContext context) {System.out.println("Spring is now");context.setSeason(new Summer());}}

我将省略夏季和秋季的课程,因为它们与以前的课程相同。

SeasonContext类:

public class SeasonContext {private Season season;public SeasonContext() {this.season = new Winter();}public void setSeason(Season season) {this.season = season;}public void whatTheSaeson() {season.theSeason(this);}
}

所有这些东西都显示了State模式的体系结构:基本状态接口,实现状态接口和状态上下文的类。 现在让我们看看它是如何工作的:

...public static void main(String[] args) {SeasonContext sc = new SeasonContext();sc.whatTheSaeson();sc.whatTheSaeson();sc.whatTheSaeson();sc.whatTheSaeson();}
...

结果将是:

Winter is now.
Spting is now
Summer is now.
Autumn is now.
参考: 设计模式:在Fruzenshtein的注释博客中,来自我们JCG合作伙伴 Alexey Zvolinskiy的陈述 。

翻译自: https://www.javacodegeeks.com/2013/07/design-patterns-state.html

状态模式 设计模式

状态模式 设计模式_设计模式:状态相关推荐

  1. 状态机设计模式_设计模式-代理/状态机模式

    代理模式 是使率非常高的模式: 为其它对象提供一种代理以控制这个对象的访问.该模式也称为委托模式,在使用的时候代理模式可以为我们提供非常好的访问控制. 如下代码 interface IGamePlay ...

  2. java设计模式之状态模式_Java中的状态设计模式

    java设计模式之状态模式 在本教程中,我们将探讨另一种流行的行为设计模式-状态设计模式. 当我们使用可以存在于多个状态的对象时,状态设计模式的知识变得非常有用. 当对象的行为取决于其当前状态时,我们 ...

  3. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  4. java 状态模式 同步_JAVA设计模式之状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...

  5. 【状态模式】Java设计模式之状态模式

    何时使用 State模式在实际使用中比较多,适合"状态"的切换.因为我们经常会使用If else if else 进行状态切换,如果针对状态的这样判断切换反复出现,我们就要联想到是 ...

  6. 状态模式 有限状态机_有限状态机解释

    状态模式 有限状态机 The finite state machine (FSM) is a software design pattern where a given model transitio ...

  7. java 策略模式 促销_设计模式之策略模式

    0x01.定义与类型 定义:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户. 从一系列里抽象出不变的部分 策略模式是将可变的部分从程序中抽象分离成算法 ...

  8. java状态机设计模式_设计模式总结-State模式

    不同的状态,不同的行为;或者说,每个状态有着相应的行为. 二.State模式的适用场合: State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif ...

  9. python 状态模式_使用状态模式自由切换登录状态

    日常开发中,登录和未登录两种状态分别有不同的操作,比如登录后才能评论.收藏.支付购买和编辑资料等操作.我们网购时看到心仪的商品,如果处于登录状态,可以加购物车或直接购买,否则会跳转到登录页面,登录后再 ...

最新文章

  1. 算法小论——第三章 又把新桃换旧符
  2. 【数字孪生】工业互联网和数字孪生
  3. ESPCMS基本导航操作
  4. asp.net的控件视图状态
  5. javase阶段总结脑图
  6. libevent项目分析(一) -- 准备阶段
  7. 中职 计算机老师 教cad,教师博客应用于职校计算机CAD教学探究.doc
  8. 7-2 定义日期类 (28 分)
  9. 实践解析丨Rust 内置 trait:PartialEq 和 Eq
  10. JavaWeb学习记录(二十五)——权限管理总结
  11. Caffe中deploy.prototxt 和 train_val.prototxt 区别
  12. 英雄无敌3pc移植android版,英雄无敌3手机版
  13. Excel学习 -- 数据透视表功能
  14. php 腾讯短信接口api,ThinkPHP5——接入腾讯云短信API
  15. 阿里云要引领数据库市场?这话没毛病
  16. 黑客全票打飞服务器,《鹅鸭杀》停服三天!更有游戏首发被冲下架
  17. 智慧灯杆网关+云平台,助力智慧城市智能照明
  18. 20189221 2018-2019-2 《密码与安全新技术专题》第三周作业
  19. Word中㎡的上标²变成了2该如何处理
  20. 淘宝彩蛋--CSS3、Console、web彩蛋指南

热门文章

  1. 等差区间 线段树+GCD
  2. 10亿个数中找出最大的10000个数
  3. Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
  4. vue前期知识点笔记
  5. 2015蓝桥杯省赛---java---A---8(移动距离)
  6. MySQL中有外键时数据表的删除方法
  7. 2的负x次幂图像_数学| NO.2,3 函数 T15
  8. 处理api返回的数据_API 乐队指挥家,网关服务正式上线
  9. Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单(转)
  10. cuba 平台_CUBA平台:TypeScript SDK和REST API