JAVA 设计模式 状态模式

用途

状态模式 (State)

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

状态模式是一种行为型模式

结构

图-状态模式结构图

State : 定义一个接口以封装与 Context 的一个特定状态相关的行为。

abstract class State {
 public abstract void Handle(Context context);
 }

ConcreteState : 每一个子类实现一个与 Context 的一个状态相关的行为。

class ConcreteStateA extends State {
     @Override
 public void Handle(Context context) {
         context.SetState(new ConcreteStateB());
     }
 }
 
 class ConcreteStateB extends State {
     @Override
 public void Handle(Context context) {
         context.SetState(new ConcreteStateA());
     }
 }

Context : 维护一个 ConcreteState 子类的实例,这个实例定义当前的状态。

class Context {
 private State state;
 public Context(State state) {
 this.state = state;
     }
 
 public void SetState(State state) {
 this.state = state;
         System.out.println("当前状态:" + state.getClass().getName());
     }
 public State GetState() {
 return state;
     }
 
 public void Request() {
         state.Handle(this);
     }
 }

测试代码

public class StatePattern {
 public static void main(String[] args) {
         Context c = new Context(new ConcreteStateA());
         c.Request();
         c.Request();
     }
 }

运行结果

当前状态:ConcreteStateB
当前状态:ConcreteStateA

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

ASP.NET MVC的View是如何被呈现出来的?[设计篇]

在前面的四篇文章中,我们介绍了各种ActionResult以及相关的请求响应机制,但是与“View的呈现”相关的ActionResult是ViewResult。...

3258
来自专栏于晓飞的专栏

Android开发从GC root分析内存泄漏

我们常说的垃圾回收机制中会提到GC Roots这个词,也就是Java虚拟机中所有引用的根对象。我们都知道,垃圾回收器不会回收GC Roots以及那些被它们间接引...

1692
来自专栏androidBlog

Android 常用工具类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

851
来自专栏androidBlog

二次封装图片第三方框架——简单工厂模式的运用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

872
来自专栏扎心了老铁

使用hive客户端java api读写hive集群上的信息

上文介绍了hdfs集群信息的读取方式,本文说hive 1、先解决依赖 <properties> <hive.version>1.2.1</hiv...

5044
来自专栏Android知识点总结

看得见的数据结构Android版之单链表篇

461
来自专栏码匠的流水账

聊聊sentinel的DegradeSlot

com/alibaba/csp/sentinel/slots/block/degrade/DegradeSlot.java

1021
来自专栏阿杜的世界

Spring Bean的生命周期管理

Spring Bean存活于容器之中,一般情况下spring bean对context的情况并不了解,如果希望某个bean知道自己在context中的代号:be...

852
来自专栏向治洪

ormlite介绍一

概述 ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。 官方网站:http...

1966
来自专栏郭霖

Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

在本系列的上一篇文章中,我们学习了Glide的基本用法,体验了这个图片加载框架的强大功能,以及它非常简便的API。还没有看过上一篇文章的朋友,建议先去阅读 An...

55410

扫码关注云+社区