第一次手写博客,见谅哈。
项目中遇见一个流程处理的问题:
从数据库导出文件,压缩,上传。
项目中实现时,使用了多层 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 }