在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、引言 1 namespace 透明式的组合模式的实现 2 { 3 /// <summary> 4 /// 该抽象类就是文件夹抽象接口的定义,该类型就相当于是抽象构件Component类型 5 /// </summary> 6 public abstract class Folder 7 { 8 //增加文件夹或文件 9 public abstract void Add(Folder folder); 10 11 //删除文件夹或者文件 12 public abstract void Remove(Folder folder); 13 14 //打开文件或者文件夹--该操作相当于Component类型的Operation方法 15 public abstract void Open(); 16 } 17 18 /// <summary> 19 /// 该Word文档类就是叶子构件的定义,该类型就相当于是Leaf类型,不能在包含子对象 20 /// </summary> 21 public sealed class Word : Folder 22 { 23 //增加文件夹或文件 24 public override void Add(Folder folder) 25 { 26 throw new Exception("Word文档不具有该功能"); 27 } 28 29 //删除文件夹或者文件 30 public override void Remove(Folder folder) 31 { 32 throw new Exception("Word文档不具有该功能"); 33 } 34 35 //打开文件--该操作相当于Component类型的Operation方法 36 public override void Open() 37 { 38 Console.WriteLine("打开Word文档,开始进行编辑"); 39 } 40 } 41 42 /// <summary> 43 /// SonFolder类型就是树枝构件,由于我们使用的是“透明式”,所以Add,Remove都是从Folder类型继承下来的 44 /// </summary> 45 public class SonFolder : Folder 46 { 47 //增加文件夹或文件 48 public override void Add(Folder folder) 49 { 50 Console.WriteLine("文件或者文件夹已经增加成功"); 51 } 52 53 //删除文件夹或者文件 54 public override void Remove(Folder folder) 55 { 56 Console.WriteLine("文件或者文件夹已经删除成功"); 57 } 58 59 //打开文件夹--该操作相当于Component类型的Operation方法 60 public override void Open() 61 { 62 Console.WriteLine("已经打开当前文件夹"); 63 } 64 } 65 66 public class Program 67 { 68 static void Main() 69 { 70 71 Folder myword = new Word(); 72 73 myword.Open();//打开文件,处理文件 74 75 myword.Add(new SonFolder());//抛出异常 76 myword.Remove(new SonFolder());//抛出异常 77 78 79 Folder myfolder = new SonFolder(); 80 myfolder.Open();//打开文件夹 81 82 myfolder.Add(new SonFolder());//成功增加文件或者文件夹 83 myfolder.Remove(new SonFolder());//成功删除文件或者文件夹 84 85 Console.Read(); 86 } 87 } 88 }
1 namespace 安全式的组合模式的实现 2 { 3 /// <summary> 4 /// 该抽象类就是文件夹抽象接口的定义,该类型就相当于是抽象构件Component类型 5 /// </summary> 6 public abstract class Folder //该类型少了容器对象管理子对象的方法的定义,换了地方,在树枝构件也就是SonFolder类型 7 { 8 //打开文件或者文件夹--该操作相当于Component类型的Operation方法 9 public abstract void Open(); 10 } 11 12 /// <summary> 13 /// 该Word文档类就是叶子构件的定义,该类型就相当于是Leaf类型,不能在包含子对象 14 /// </summary> 15 public sealed class Word : Folder //这类型现在很干净 16 { 17 //打开文件--该操作相当于Component类型的Operation方法 18 public override void Open() 19 { 20 Console.WriteLine("打开Word文档,开始进行编辑"); 21 } 22 } 23 24 /// <summary> 25 /// SonFolder类型就是树枝构件,现在由于我们使用的是“安全式”,所以Add,Remove都是从此处开始定义的 26 /// </summary> 27 public abstract class SonFolder : Folder //这里可以是抽象接口,可以自己根据自己的情况而定 28 { 29 //增加文件夹或文件 30 public abstract void Add(Folder folder); 31 32 //删除文件夹或者文件 33 public abstract void Remove(Folder folder); 34 35 //打开文件夹--该操作相当于Component类型的Operation方法 36 public override void Open() 37 { 38 Console.WriteLine("已经打开当前文件夹"); 39 } 40 } 41 42 /// <summary> 43 /// NextFolder类型就是树枝构件的实现类 44 /// </summary> 45 public sealed class NextFolder : SonFolder 46 { 47 //增加文件夹或文件 48 public override void Add(Folder folder) 49 { 50 Console.WriteLine("文件或者文件夹已经增加成功"); 51 } 52 53 //删除文件夹或者文件 54 public override void Remove(Folder folder) 55 { 56 Console.WriteLine("文件或者文件夹已经删除成功"); 57 } 58 59 //打开文件夹--该操作相当于Component类型的Operation方法 60 public override void Open() 61 { 62 Console.WriteLine("已经打开当前文件夹"); 63 } 64 } 65 66 public class Program 67 { 68 static void Main() 69 { 70 //这是安全的组合模式 71 Folder myword = new Word(); 72 73 myword.Open();//打开文件,处理文件 74 75 76 Folder myfolder = new NextFolder(); 77 myfolder.Open();//打开文件夹 78 79 //此处要是用增加和删除功能,需要转型的操作,否则不能使用 80 ((SonFolder)myfolder).Add(new NextFolder());//成功增加文件或者文件夹 81 ((SonFolder)myfolder).Remove(new NextFolder());//成功删除文件或者文件夹 82 83 Console.Read(); 84 } 85 } 86 }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论