博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
职责链模式
阅读量:4634 次
发布时间:2019-06-09

本文共 2553 字,大约阅读时间需要 8 分钟。

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

 

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

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

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

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

 

下面代码仅用于演示。

 

代码如下:

定义状态枚举

1     public enum FileState2     {3         NotExport,4         Exported,5         Zip,6         Upload7     }

 

定义基类:

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             else16             {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             else16             {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             else10             {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     }

 

转载于:https://www.cnblogs.com/suzixuan/p/5342618.html

你可能感兴趣的文章
git 下载 安装
查看>>
录制终端信息并回放
查看>>
JS中window.event事件使用详解
查看>>
ES6深入学习记录(一)class方法相关
查看>>
Linux 文件系统及 ext2 文件系统
查看>>
jenkins ssl证书报错问题解决
查看>>
《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
查看>>
C语言对mysql数据库的操作
查看>>
SQL Server 数据库备份
查看>>
INNO SETUP 获得命令行参数
查看>>
http编程学习(C#)
查看>>
DNN 数据访问策略 (转)
查看>>
Sublime Text 自动换行
查看>>
mybatis逆向工程配置文件怎么再偷懒(懒出天际)
查看>>
hdu1160FatMouse's Speed(DP)
查看>>
Codeforces Round #228 (Div. 1)B
查看>>
poj2420A Star not a Tree?(模拟退火)
查看>>
switch case
查看>>
crash
查看>>
ASP.NET MVC 4 (十三) 基于表单的身份验证
查看>>