设计模式之状态模式


[toc]

一、概念

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

二、场景

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

三、实现

  • 条件
    • 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循环]

来源:https://my.oschina.net/fusr/blog/5582150


码神部落- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与码神部落立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者爷依然萧洒码神部落享有帖子相关版权。
3、码神部落管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者爷依然萧洒码神部落的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。

最新回复 (0)
    • 码神部落
      2
        立即登录 立即注册 GitHub登录
返回
发新帖
作者最近主题: