设计模式之状态模式

一、概念

  • 属性改变,行为改变,也就是说属性与行为绑定在一起。

二、场景

  • 系统实时监控以及实时发送告警消息提示。

三、实现

  • 条件
    • 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);    
      

四、优缺点

  • 优点
    • 解耦状态与行为之间的关系。
    • 可扩展性比较强。
  • 缺点
    • 状态类过多,导致资源占过多[将对象添加到list,占用内存],导致性能下降[list循环]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值