zoukankan      html  css  js  c++  java
  • 职责链模式

    第一次手写博客,见谅哈。

    项目中遇见一个流程处理的问题:

    从数据库导出文件,压缩,上传。

    项目中实现时,使用了多层 if else嵌套,觉得太不美观。并且不好维护。所以想到了下面这个设计模式。

    用来解决原来大量的分支判断造成维护困难,灵活性差的问题。

    下面代码仅用于演示。

    代码如下:

    定义状态枚举

    1     public enum FileState
    2     {
    3         NotExport,
    4         Exported,
    5         Zip,
    6         Upload
    7     }

    定义基类:

     1 public abstract class Hander
     2     {
     3         protected Hander op;
     4 
     5         public void SetOp(Hander op)
     6         {
     7             this.op = op; ;
     8         }
     9 
    10         public abstract void HandleRequest(FileState request);
    11     }

    定义子类:

     1  public class FileExport : Hander
     2     {
     3         public override void HandleRequest(FileState request)
     4         {
     5             if (request == FileState.NotExport)
     6             {
     7                 //执行导出
     8                 Console.WriteLine("导出成功");
     9                 op.HandleRequest(FileState.Exported);
    10             }
    11             else if (op != null)
    12             {
    13                 op.HandleRequest(FileState.Exported);
    14             }
    15             else
    16             {
    17                 throw new ArgumentException("参数错误");
    18             }
    19         }
    20     }
     1  public class FileZip : Hander
     2     {
     3         public override void HandleRequest(FileState request)
     4         {
     5             if (request == FileState.Exported)
     6             {
     7                 //执行压缩
     8                 Console.WriteLine("压缩成功");
     9                 op.HandleRequest(FileState.Zip);
    10             }
    11             else if (op != null)
    12             {
    13                 op.HandleRequest(FileState.Zip);
    14             }
    15             else
    16             {
    17                 throw new ArgumentException("参数错误");
    18             }
    19         }
    20     }
     1 public class FileUpload : Hander
     2     {
     3         public override void HandleRequest(FileState request)
     4         {
     5             if (request == FileState.Zip)
     6             {
     7                 Console.WriteLine("上传成功");
     8             }
     9             else
    10             {
    11                 throw new ArgumentException("参数错误");
    12             }
    13         }
    14     }

    客户端调用:

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Hander objFileExport = new FileExport();
     6             Hander objFileZip = new FileZip();
     7             Hander objFileUpload = new FileUpload();
     8             objFileExport.SetOp(objFileZip);
     9             objFileZip.SetOp(objFileUpload);
    10 
    11             //执行
    12             objFileExport.HandleRequest(FileState.NotExport);
    13 
    14             Console.ReadLine();
    15         }
    16     }
  • 相关阅读:
    20201015-3 每周例行报告
    20201008-1 每周例行报告
    20200924-2 功能测试
    贺敬文2019102936-1总结
    20191114-1 每周例行报告
    20191107-1 每周例行报告
    20191031-1 每周例行报告
    每周例行报告
    20191017-1 每周例行报告
    每周例行报告
  • 原文地址:https://www.cnblogs.com/suzixuan/p/5342618.html
Copyright © 2011-2022 走看看