设计模式——状态模式19

server/2024/9/24 2:51:19/

状态模式是一种行为设计模式, 允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式的核心是状态与行为绑定,不同的状态对应不同的行为。
设计模式,一定要敲代码理解

在这里插入图片描述

状态行为抽象

java">//在某种状态下,能做什么事情。
public interface State {void play();void  study();void  battle();
}

状态行为实现

java">/*** @author ggbond* @date 2024年04月17日 08:34* 猪猪侠 正常状态*/
public class normalState implements  State{@Overridepublic void play() {System.out.println("在望子成龙小学,与同学玩耍");}@Overridepublic void study() {System.out.println("在望子成龙小学,认真学习");}@Overridepublic void battle() {System.out.println("无战斗技能");}
}
java">/*** @author ggbond* @date 2024年04月17日 08:35* 猪猪侠 吃超级棒棒糖后的状态*/
public class lollipopsState implements State{@Overridepublic void play() {System.out.println("不玩耍");}@Overridepublic void study() {System.out.println("学习效率提升300%");}@Overridepublic void battle() {System.out.println("释放:降猪十八掌");}
}

上下文

java">/*** @author ggbond* @date 2024年04月17日 08:29*/
public class Context {private  State state;public void play(){this.state.play();}public void  study(){this.state.study();}public void  battle(){this.state.battle();}public State getState() {return state;}public void setState(State state) {this.state = state;}
}

测试与结果

java">/*** @author ggbond* @date 2024年04月17日 08:43*/
public class Main {public static void main(String[] args) {Context context = new Context(); // 新建一个上下文context.setState(new normalState()); // 设置当前状态context.play();context.study();context.battle();// 调用行为System.out.println("===============");context.setState(new lollipopsState());context.play();context.study();context.battle();// 调用行为}
}

总结

满足单一职责原则, 开闭原则。 无需修改已有状态类和上下文就能引入新状态。状态模式在处理具有多种状态和状态转换的对象时非常有用,可以提高代码的质量和可维护性。

java">在望子成龙小学,与同学玩耍
在望子成龙小学,认真学习
无战斗技能
===============
不玩耍
学习效率提升300%
释放:降猪十八掌

代码下载

代码下载


http://www.ppmy.cn/server/13464.html

相关文章

【ContextCapture建模精品教程】PhotoScan空三成果导入ContextCapture建模教程

【ContextCapture建模精品教程】PhotoScan空三成果导入ContextCapture建模教程 文章目录 前言一、PhotoScan软件空三解算二、ContextCapture软件操作总结前言 ContextCapture是一款行业应用广的三维建模的软件,但是ContextCapture处理的空三能力比较弱,导致出现后期模型效果…

【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 Spring Boot 配置文件一. 配置文…

Linux 基础命令使用创建用户

浏览网站的时候图片,看到一个小练习。创建用户分别位于不同的用户组。 解答下面的题目 2、建立用户使用 useradd,设置密码使用passwd的命令。大概不会使用命令可以借助man来解答。 先建立用户组: groupadd group1 # group1 不存在先建立&…

C++ —— 继承

什么是继承? 继承是指一种代码可以被复用的机制,在一个类的基础上进行扩展,产生的新类叫做派生类,被继承的类叫基类。(也可称为子类和父类) 继承的写法: class B : 继承方式 A (…

业务复习知识点Oracle查询

业务数据查询-1 单表查询 数据准备 自来水收费系统建表语句.sql 简单条件查询 精确查询 需求 :查询水表编号为 30408 的业主记录 查询语句 : select * from t_owners where watermeter 30408; 查询结果 : 模糊查询 需求 :查询业…

RK3588 Android13 鼠标风格自定义动态切换

前言 电视产品,客户提供了三套鼠标图标过来,要求替换系统中原有丑陋风格且要支持动态切换, 并且在 TvSetting 中要有菜单,客户说啥就是啥呗,开整。 效果图 test framework 部分修改文件清单 png 为鼠标风格资源图片,这里就不提供了,可自由找一个替换一下就行 framew…

QA测试开发工程师面试题满分问答20: 软件的安全性应从哪几个方面去测试?

软件的安全性测试应从多个方面进行,并确保覆盖以下关键方面: 当回答问题时,可以根据自己的经验和知识,从上述要点中选择适合的方面进行详细说明。强调测试的综合性、全面性和持续性,并强调测试的重要性以及如何与开发团…