一、概念
- 属性改变,行为改变,也就是说属性与行为绑定在一起。
二、场景
- 系统实时监控以及实时发送告警消息提示。
三、实现
- 条件
- java
- 场景
- 以项目运行,监控项目,出现异常并发送告警信息为场景实现状态模式。
- 代码实现
- 新建项目类,类名:Product
package com.StatePattern; import java.util.ArrayList; import java.util.List; /** * 运行的系统项目,出现异常信息发送短消息 * 异常数量:= 1--5 警告 * 异常数量:= 6--10 严重 * 异常数量:>10 崩溃 */ public class Product { private List<AbstractState> list = new ArrayList<>(); public void Add(AbstractState abstractState) { list.add(abstractState); } //异常数量 private int exceptionCount; //发送信息 public void setExceptionCount(int exceptionCount) { this.exceptionCount = exceptionCount; list.forEach( o ->{ o.exceptionCount = this.exceptionCount; o.Sender(); }); } }
- 新建状态抽象类,类名:AbstractState
package com.StatePattern; /** * 状态接口类 */ public abstract class AbstractState { public int exceptionCount; public abstract void Sender(); }
- 新建警告状态实现类,类名:WarningState
package com.StatePattern; /** * 警告状态类 */ public class WarningState extends AbstractState { @Override public void Sender() { if(this.exceptionCount <=5) System.out.println("警告信息!"); } }
- 新建严重状态实现类,类名:SeriousState
package com.StatePattern; /** * 严重状态类 */ public class SeriousState extends AbstractState{ @Override public void Sender() { if(this.exceptionCount>=6&&this.exceptionCount<=10) System.out.println("严重信息!"); } }
- 新建崩溃状态实现类,类名:CollapseState
package com.StatePattern; /** * 崩溃状态类 */ public class CollapseState extends AbstractState { @Override public void Sender() { if(this.exceptionCount>=11) System.out.println("崩溃信息!"); } }
- 入口函数类:
//项目类 Product product = new Product(); //添加状态对象 product.Add(new WarningState()); product.Add(new CollapseState()); product.Add(new SeriousState()); //赋值并发送信息 product.setExceptionCount(10);
- 新建项目类,类名:Product
四、优缺点
- 优点
- 解耦状态与行为之间的关系。
- 可扩展性比较强。
- 缺点
- 状态类过多,导致资源占过多[将对象添加到list,占用内存],导致性能下降[list循环]