java 状态模式 重试_java状态模式
一:状态模式
描述:
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。
状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。
状态模式的意图是将表示状态的逻辑分散到代表状态的不同类中。
角色分类:
a.环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给 出此环境对象的现有状态。
b.抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
c.具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为
原理描述:
package com.cloud.day1;
public class StateClient {
public static void main(String[] args) {
// 创建状态
State state=new ConceteState();
//创建环境
Context context=new Context();
//在环境中设置状态
context.setState(state);
context.sampleOperation();
}
}
/**
* 环境类
* @author Administrator
* 定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环
* 境对象的现有状态。
*/
class Context{
private State state;
public void sampleOperation(){
state.sampleOperation();
}
public void setState(State state){
this.state=state;
}
}
/**
* 抽象状态接口
* @author Administrator
* 封装环境(Context)对象的一个特定的状态所对应的行为。
*/
interface State{
void sampleOperation();
}
/**
* 具体状态类
* @author Administrator
* 每一个具体状态类都实现了环境(Context)的一个状态所对应的行为
*/
class ConceteState implements State{
public void sampleOperation() {
System.out.println("ConceteState.sampleOperation()");
}
}
二:应用场景
TCP连接原理
在TCP/IP连接上建立一个基于网络的连接请求。在这种情况下,客户在一台机器上,而服务器驻留在另一台机器上,这两台机器通过一个TCP/IP网络连接。
代码:
package com.cloud.day1;
public class Demo {
public static void main(String[] args) {
// 创建状态
TcpState state=new Closed();
//创建环境
TcpConnection tcpcontext=new TcpConnection();
//在环境中设置状态
tcpcontext.setTcpState(state);
tcpcontext.open();
}
}
/**
* TCP/IP网络连接类,连接网络时可能处于的状态
* @author Administrator
*/
class TcpConnection{
private TcpState state;
public void open(){
state.open();
}
public void setTcpState(TcpState state){
this.state=state;
}
public void close(){
state.close();
}
public void message(){
state.message();
}
}
/**
* 抽象状态接口
* @author Administrator
* 封装环境(Context)对象的一个特定的状态所对应的行为。
*/
interface TcpState{
void open();
void close();
void message();
}
/**
* 表示连接已经建立了
* @author Administrator
*/
class Establised implements TcpState{
public void open() {
System.out.println("Establised.open(),打开状态");
}
public void close() {
System.out.println("Establised.close()");
}
public void message() {
System.out.println("Establised.message()");
}
}
/**
* 表示初始状态。
* @author Administrator
*/
class Closed implements TcpState{
public void open() {
System.out.println("Closed.open(),没有代开");
}
public void close() {
System.out.println("Closed.close()");
}
public void message() {
System.out.println("Closed.message()");
}
}
/**
* 表示服务器端的某个SOCKET处于监听状态,可以接受连接。
* @author Administrator
*
*/
class Listen implements TcpState{
public void open() {
System.out.println("Listen.open(),等待打开");
}
public void close() {
System.out.println("Listen.close()");
}
public void message() {
System.out.println("Listen.message()");
}
}
java 状态模式 重试_java状态模式相关推荐
- java 策略模式例子_java策略模式实例解析
1.策略模式概述: 策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并让它们可以相互替换.策略模式让算法独立于使用它的客户而变化,也称为政策模式.策略模式是一种行为型 ...
- java策略模式案例_java策略模式典型案例
java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...
- java 异常后重试_java – 异常后自动重试的功能
如果抛出一些异常,我已经使这个抽象类自动重试网络调用. >我在InterruptedException&之后注意不要重试 的UnknownHostException. >我重试了5 ...
- java 异常后重试_Java trycatch使用重试Retryer
重试的工具类 Guava-retrying 依赖 com.github.rholder guava-retrying 2.0.0 Retryer retryer = RetryerBuilder.ne ...
- java quartz 失败重试_java – Quartz在失败时重试
资料来源: Automatically Retry Failed Jobs in Quartz 如果你想有一个不断尝试的作业,直到成功,你所要做的就是抛出一个带有一个标志的JobExecutionEx ...
- java状态模式和策略模式_Java状态和策略设计模式之间的差异
java状态模式和策略模式 为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设 ...
- java 状态模式 同步_JAVA设计模式之状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...
- 状态模式java 在线投票_Java 状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...
- java state用法_Java状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elsei ...
最新文章
- 16岁应该遵循什么_16岁就被张艺谋选中,刘浩存到底有什么来头?
- javascript检测对象中是否存在某个属性判断方法小结
- bash 判断 os 版本_Kali Linux 2020.3开始用ZSH取代Bash旅程
- 更新json文件_忽略packagelock.json?
- 发送邮件时,如何附带上中文等价名信息
- LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)
- sql server 高可用故障转移(6)
- 【5.0】对象生命周期及crud操作
- 抓包测试:车牌识别抓拍一体机数据平台读取不到的问题
- 学海无涯——人工智能应用实例之写作软件的基本概念
- Python之统计英文字符的个数
- HDFS容错性设计有哪些?
- sprint敏捷开发
- HTML网页的基本结构
- feign.exception Connection reset executing
- 高级数据库三:浅谈数据库事务(transaction)
- 推荐三个图片编辑软件给你
- java的数据类型:8大基本数据类型
- autojs之多线程-Threads
- 下载卫星影像地图软件哪个好用?
热门文章
- Android-01:扫描SD卡以.xxx结尾的文件
- asp.net常见问题收集
- sd卡和sdio sdhc_想买TF卡,那些标注卡上的参数看懂了么?
- 生活质量衡量系统_16个你需要了解的DevOps指标,助你提升软件质量
- Python绘制每个柱的颜色各不相同的三维柱状图
- 微课系列(一):Python列表remove()方法工作原理
- oracle的ora01504,Oracle中的ORA-01548: active rollback segment '_SYSSMU1$' found
- HTML如何实现利表自动求和,使用模板标记在html模板中求和
- php simplexmlelement array,php中SimpleXMLElement 对象转换为数组
- java doprivileged_【转】关于AccessController.doPrivileged