一:状态模式

描述:

状态模式,又称状态对象模式(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状态模式相关推荐

  1. java 策略模式例子_java策略模式实例解析

    1.策略模式概述: 策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并让它们可以相互替换.策略模式让算法独立于使用它的客户而变化,也称为政策模式.策略模式是一种行为型 ...

  2. java策略模式案例_java策略模式典型案例

    java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...

  3. java 异常后重试_java – 异常后自动重试的功能

    如果抛出一些异常,我已经使这个抽象类自动重试网络调用. >我在InterruptedException&之后注意不要重试 的UnknownHostException. >我重试了5 ...

  4. java 异常后重试_Java trycatch使用重试Retryer

    重试的工具类 Guava-retrying 依赖 com.github.rholder guava-retrying 2.0.0 Retryer retryer = RetryerBuilder.ne ...

  5. java quartz 失败重试_java – Quartz在失败时重试

    资料来源: Automatically Retry Failed Jobs in Quartz 如果你想有一个不断尝试的作业,直到成功,你所要做的就是抛出一个带有一个标志的JobExecutionEx ...

  6. java状态模式和策略模式_Java状态和策略设计模式之间的差异

    java状态模式和策略模式 为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设 ...

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

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

  8. 状态模式java 在线投票_Java 状态模式

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

  9. java state用法_Java状态模式(State模式)

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

最新文章

  1. 16岁应该遵循什么_16岁就被张艺谋选中,刘浩存到底有什么来头?
  2. javascript检测对象中是否存在某个属性判断方法小结
  3. bash 判断 os 版本_Kali Linux 2020.3开始用ZSH取代Bash旅程
  4. 更新json文件_忽略packagelock.json?
  5. 发送邮件时,如何附带上中文等价名信息
  6. LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)
  7. sql server 高可用故障转移(6)
  8. 【5.0】对象生命周期及crud操作
  9. 抓包测试:车牌识别抓拍一体机数据平台读取不到的问题
  10. 学海无涯——人工智能应用实例之写作软件的基本概念
  11. Python之统计英文字符的个数
  12. HDFS容错性设计有哪些?
  13. sprint敏捷开发
  14. HTML网页的基本结构
  15. feign.exception Connection reset executing
  16. 高级数据库三:浅谈数据库事务(transaction)
  17. 推荐三个图片编辑软件给你
  18. java的数据类型:8大基本数据类型
  19. autojs之多线程-Threads
  20. 下载卫星影像地图软件哪个好用?

热门文章

  1. Android-01:扫描SD卡以.xxx结尾的文件
  2. asp.net常见问题收集
  3. sd卡和sdio sdhc_想买TF卡,那些标注卡上的参数看懂了么?
  4. 生活质量衡量系统_16个你需要了解的DevOps指标,助你提升软件质量
  5. Python绘制每个柱的颜色各不相同的三维柱状图
  6. 微课系列(一):Python列表remove()方法工作原理
  7. oracle的ora01504,Oracle中的ORA-01548: active rollback segment '_SYSSMU1$' found
  8. HTML如何实现利表自动求和,使用模板标记在html模板中求和
  9. php simplexmlelement array,php中SimpleXMLElement 对象转换为数组
  10. java doprivileged_【转】关于AccessController.doPrivileged