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 条评论
登录 后参与评论

相关文章

来自专栏Java Edge

SpringMVC 的处理拦截器0 目录1 Spring MVC拦截器流程图2 Spring Web MVC 的处理器拦截器3 拦截器配置4 拦截器Handler

2707
来自专栏别先生

SpringMVC的初始

1:其实一开始对SSH和SSM并不是很熟悉的,对SSH可能熟悉些(Struts,Spring,Hibernate)这三个框架。但是由于框架的更新,和出现了更好的...

1859
来自专栏学习力

《Java从入门到放弃》框架入门篇:springMVC数据传递 (二)

1554
来自专栏Java工程师日常干货

MyBatis+Spring MVC开发指南(三)

本系列的前面2篇文章,已经为大家介绍了MyBatis;从本篇博客开始将为大家介绍Spring MVC开发的那些事!关于Spring MVC这块将会涵盖Sprin...

691
来自专栏闻道于事

SpringMVC框架(一)

SpringMVC最核心:DispatcherServlet SpringMVC环境搭建: 结构: ? 过程:   1.导包   2.声明SpringMVC核心...

2575
来自专栏Java面试笔试题

Spring MVC的工作原理是怎样的?

① 客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求。 ② DispatcherSer...

613
来自专栏IT 指南者专栏

SpringMVC 框架系列之组件概述与配置详解

微信公众号:compassblog 欢迎关注,互相学习,共同进步! 有任何问题,请后台留言联系! 在上一篇文章 SpringMVC 框架系列之初识与入门实例 的...

2717
来自专栏王二麻子IT技术交流园地

《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置

上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了。这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置。 一、执行...

2779
来自专栏IT笔记

教你十分钟快速搭建springBoot项目实战

首先申明,本文并没有原理性的东西(请自行百度),适合于刚接触springBoot并有一定javaweb开发基础的人群,大神和小白请出门左拐。 一、使用工具 Ec...

3468
来自专栏云霄雨霁

SpringMVC--处理器映射器和处理器适配器笔记

1220

扫码关注云+社区