桥接模式:将抽象出来的那部分和它的实现(方法、操作)部分分离,使它们可以独立变化。(两者间通过构造函数注入依赖)
1 namespace DesignModel.桥接模式 2 { 3 4 /// <summary> 5 /// 操作抽象类 6 /// </summary> 7 abstract class FileOperate 8 { 9 public abstract void Operate(string type); 10 } 11 12 class Export : FileOperate 13 { 14 public override void Operate(string type) 15 { 16 switch (type)//这里可做进一步优化,但不影响说明本模式 17 { 18 default: 19 Console.WriteLine("导出" + type); 20 break; 21 } 22 } 23 } 24 25 class Convent : FileOperate 26 { 27 public override void Operate(string type) => Console.WriteLine("转换" + type); 28 29 } 30 31 32 33 abstract class File 34 { 35 protected FileOperate fileOperate { get; set; } 36 public void SetOperate(FileOperate fo) => fileOperate = fo; 37 38 public abstract void Operate(); 39 } 40 41 class Excel : File 42 { 43 public override void Operate() => fileOperate.Operate(nameof(Excel)); 44 } 45 46 class Text : File 47 { 48 public override void Operate() => fileOperate.Operate(nameof(Text)); 49 } 50 51 } 52 53 static void 桥接模式() 54 { 55 File f = new Excel(); 56 FileOperate fo = new Export(); 57 f.SetOperate(fo);//给文件指定操作类型 58 f.Operate();//调用指定的操作 59 }
使用的代码给人组合模式的的感觉,相同的是这种分而治之的思想,细想不同之处在于:桥接模式将原业务分解之后,部分可以自由变化,再组装起来使用。而组合模式是将相同的部分分解出来,可以组合到其它部分以复用,是树状结构。