• 设计模式之状态模式


    一、概念

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

    二、场景

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

    三、实现

    • 条件
      • java
    • 场景
      • 以项目运行,监控项目,出现异常并发送告警信息为场景实现状态模式。
    • 代码实现
      • 新建项目类,类名:Product
            package com.StatePattern;
            
            import java.util.ArrayList;
            import java.util.List;
            
            /**
             * 运行的系统项目,出现异常信息发送短消息
             * 异常数量:= 1--5 警告
             * 异常数量:= 6--10 严重
             * 异常数量:>10 崩溃
             */
            public class Product {
                private List 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();
                    });
                }
            }
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
      • 新建状态抽象类,类名:AbstractState
            package com.StatePattern;
            
            /**
             * 状态接口类
             */
            public abstract class AbstractState {
              public  int exceptionCount;
              public abstract  void Sender();
            } 
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
      • 新建警告状态实现类,类名:WarningState
            package com.StatePattern;
            
            /**
             * 警告状态类
             */
            public class WarningState extends AbstractState {
            
                @Override
                public void Sender()
                {
                   if(this.exceptionCount <=5)
                       System.out.println("警告信息!");
                }
            }
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
      • 新建严重状态实现类,类名:SeriousState
            package com.StatePattern;
            
            /**
             * 严重状态类
             */
            public class SeriousState extends  AbstractState{
                @Override
                public void Sender() {
                  if(this.exceptionCount>=6&&this.exceptionCount<=10)
                      System.out.println("严重信息!");
                }
            }
                
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
      • 新建崩溃状态实现类,类名:CollapseState
             package com.StatePattern;
            
            /**
             *  崩溃状态类
             */
            public class CollapseState extends AbstractState {
                @Override
                public void Sender() {
                  if(this.exceptionCount>=11)
                      System.out.println("崩溃信息!");
                }
            }
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
      • 入口函数类:
            //项目类
            Product product = new Product();
            //添加状态对象
            product.Add(new WarningState());
            product.Add(new CollapseState());
            product.Add(new SeriousState());
            //赋值并发送信息
            product.setExceptionCount(10);    
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

    四、优缺点

    • 优点
      • 解耦状态与行为之间的关系。
      • 可扩展性比较强。
    • 缺点
      • 状态类过多,导致资源占过多[将对象添加到list,占用内存],导致性能下降[list循环]
  • 相关阅读:
    [ACNOI2022]总差一步
    【Educoder数据挖掘实训】异常值检测-箱线图
    机器学习算法(八):基于BP神经网络的乳腺癌的分类预测
    辽宁工程技术大学计算机考研资料汇总
    【DS】二叉搜索树的介绍和实现
    【DRAM存储器九】SDRAM介绍-read、write、Precharge、DQM、Power down、Clock Suspend命令
    C++学习:对象的构造
    智能合约漏洞案例,Palmswap 90 万美元漏洞分析
    Flutter高仿微信-第56篇-搜索好友
    QTableWidget 设置列宽行高大小的几种方式及其他常用属性设置
  • 原文地址:https://blog.csdn.net/Fu_Shi_rong/article/details/127133023