设计模式之状态模式
状态模式
-
状态模式结构图:
-
示例代码:
// 抽象状态类 public abstract class Status { protected ApplicationContext context; public void setContext(ApplicationContext context) { this.context = context; } abstract void handle(); } // 具体状态类A public class ConcreteStatusA extends Status{ @Override public void handle() { System.out.println("状态A执行当前处理"); } } // 具体状态类B public class ConcreteStatusB extends Status{ @Override public void handle() { System.out.println("状态B执行当前处理"); context.setStatus(ApplicationContext.STATUS_A); context.getStatus().handle(); } } // 容器类 @Data public class ApplicationContext { public static final Status STATUS_A = new ConcreteStatusA(); public static final Status STATUS_B = new ConcreteStatusB(); private Status status; { STATUS_A.setContext(this); STATUS_B.setContext(this); } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; this.status.setContext(this); } public void handle(){ this.status.handle(); } } // 测试 public class StatusTest { public static void main(String[] args) { ApplicationContext context = new ApplicationContext(); context.setStatus(ApplicationContext.STATUS_A); context.handle(); System.out.println("==================="); context.setStatus(ApplicationContext.STATUS_B); context.handle(); } }
-
总结:
优点:将状态独立为类,提高了系统的可维护性;状态类职责明确且具备扩展性;
缺点:如果一个事物具备很多的状态,则会造成状态类太多,状态类的结构和实现都较为复杂,且对开闭原则支持并不好.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探