职责链模式

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

 

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

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

项目中实现时,使用了多层 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     }

 

posted @ 2016-03-31 20:29  苏子轩2015  阅读(198)  评论(1编辑  收藏  举报