设计模式:状态

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

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

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

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

季节的基本状态界面:

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);}
}

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

...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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[UWP]了解模板化控件(9):UI指南

[UWP]了解模板化控件(9):UI指南 原文:[UWP]了解模板化控件(9):UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性,用于在新建ControlTemplate时使用这些约定的属性。 譬如,修改HeaderedContentControl的Co…

Java的反射API

如果您曾经问​​过自己以下问题: –“如何在字符串中仅包含其名称的方法调用?” –“如何动态列出类中的所有属性?” –“如何编写一种将任何给定对象的状态重置为默认值的方法?” 然后您可能已经听说过Java的Reflection API…

linux服务器基本常识,服务器搭建-Linux基础知识

服务器搭建还是需要一些Linux知识的,这节就聊点基础的。文件权限操作查看权限Linux中每个文件对每个用户来说都有对应的权限,在任一路径中输入ll就可以查看这些信息:rootip-*** /usr/local # lltotal 32Kdrwxr-xr-x 2 root root 4.0K Jan 14 …

CSS实现单行与多行文字省略(truncation)

在上一篇文章小div布局之卡片堆叠(card-stacking)中有多行文字溢出省略的效果,这篇文章就对这种效果(包括单行文字溢出省略)的实现做个简单的记录,以防自己忘记。具体来说,就是要实现这种文字排…

logback配置详解和使用

最近知道一种打印日志的新方法,在此做一下学习总结。 转自:行走在云端的愚公 https://www.cnblogs.com/warking/p/5710303.html 一、logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前…

RAID技术超详细讲解

RAID 技术是一种多磁盘技术,面对数据的各方面有着两面性的影响,整体来说优点大于缺点的,下面我将详细介绍一下 RAID ,简称磁盘阵列技术。 一、RAID 概述 1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文 “A C…

Java安全教程–创建SSL连接和证书的分步指南

在有关应用JEE安全性的系列文章中,我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程。 如我们之前的文章中所述, 安全套接字层(SSL)/传输层安全性(TLS)将启用客户端和Web服…

[转]CSS hack大全详解

转自:CSS hack大全&详解 1、什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准)&#xff0c…

产品经理应该具备的技能(2)如何做一个好的数据产品经理?

一、如何做一个好的数据产品经理? PD(指产品经理,下同)本身就是在做牛做马,关系圈异常复杂。数据PD也不例外。而且打交道的人更多。以下是我用PPT绘制的数据产品经理关系圈。如果你也做过 数据产品的产品经理&#xff…

Java EE CDI程序化依赖关系消歧示例–注入点检查

在本教程中,我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义。 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关系歧义消除。 在这里,我们将向您展示如何以动态方式避免依赖消除歧义。 我们将通过检查注入另一个…

机器学习算法整理(四)集成算法—随机森林模型

随机:数据采样随机,特征选择随机 (数据采样,有放回) 转载于:https://www.cnblogs.com/douzujun/p/8386930.html

linux人脸识别视频推流,RTMP推流协议视频智能分析/人脸识别/直播点播平台EasyDSS接口调用注意事项介绍...

TSINGSEE青犀视频目前推出了前端支持不同协议设备接入的视频智能分析平台,包括RTSP协议的EasyNVR、GB28181协议的EasyGBS,RTMP推流协议的EasyDSS,还有能够进行人脸识别、车牌识别的EasyCVR,这些平台均提供了视频转码分发的能力&am…

在基于图论的Java程序中基于DSL的输入图数据的方法

我们大多数人已经编写了一些程序来处理图论算法,例如查找两个顶点之间的最短路径,查找给定图的最小生成树等等。 在这些算法的每一种中,表示图形的编程方式是使用邻接矩阵或邻接表 。 两者都不是定义图形输入的非常直观的方法。 例如&#xf…

Remmarguts' Date(POJ2449+最短路+A*算法)

题目链接&#xff1a;http://poj.org/problem?id2449 题目&#xff1a; 题意&#xff1a;求有向图两点间的k短路。 思路&#xff1a;最短路A*算法 代码实现如下&#xff1a; 1 #include <set>2 #include <map>3 #include <queue>4 #include <stack>5 …

usb3.0 linux无法识别,USB3.0接口不能识别U盘的解决方法

USB接口可以说是电脑的标配&#xff0c;现在基本上所有电脑都会搭载USB接口。而USB标准从1.0发展到现在的3.0&#xff0c;甚至更新的也已出来。不过&#xff0c;如果USB3.0无法识别U盘&#xff0c;那该怎么办呢?USB3.0是一种技术也是一种规范&#xff0c;现在很多笔记本都是默…

table 鼠标移上去改变单元格边框颜色。

表格定义了 border-collapse:collapse;边框会合并为一个单一的边框。会忽略 border-spacing 和 empty-cells 属性。用td:hover,显示不全 搜索了好久&#xff0c;没有找到好的方法&#xff0c;用左右边框也不完美。 于是就在想&#xff0c;移上去的时候给加个伪元素after&#…

PotPlayer安装与配置

目录 1.简介 2.安装 3.设置 基本选项设置&#xff1a; 播放选项设置&#xff1a; PotPlayer皮肤设置&#xff1a; 1.简介 PotPlayer一款小巧简单的视频播放软件&#xff0c;具有于强大的定制能力和个性化功能。 2.安装 官网下载 potplayer http://potplayer.daum.net/?langzh_…

Hadoop的目录结构

转载于:https://www.cnblogs.com/wzlbigdata/p/8392162.html

linux 实验 ps,Linux实验室:监控命令iostat与ps_服务器x86服务器-中关村在线

4、iostat与上面的命令相似&#xff0c;很显然&#xff0c;这个linux系统监控命令是属于IO监控系列的&#xff0c;iostat(I/O statistics&#xff0c;输入输出统计)是一个用于收集显示系统存储设备输入和输出状态统计的简单工具。例如命令&#xff1a;iostat -m -x 1 1000。从结…

基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互

想象以下情况&#xff1a; 您需要从访问您的网站的用户那里获取一个密钥&#xff08;在非对称情况下为用户的公共密钥 &#xff09;&#xff0c;并希望浏览器记住私有部分&#xff0c;而不会因冗长的导入过程而困扰用户。 老实说&#xff0c;实际上&#xff0c;您甚至不希望用…