桥接模式
定义
事物类型本身有着多维度的变化,当我们在面对这样的处境时,一味的继承去扩展,会使得维度低的类型非常臃肿,代码耦合度会非常高。如何的解耦,设计的思想告诉我们---尽量用组合代替继承,这就引入了桥接模式。使用组合代替继承这就是桥接的原理所在。
类图
代码
1 public interface IMobilePhone 2 { 3 void Call(); 4 void SendMessage(string message); 5 } 6 public class NormalPhone : IMobilePhone 7 { 8 9 public void Call() 10 { 11 Console.WriteLine("使用普通手机打电话"); 12 } 13 14 public void SendMessage(string message) 15 { 16 Console.WriteLine("使用普通手机发送消息:"+message); 17 } 18 } 19 public class ItelligentPhone : IMobilePhone 20 { 21 22 public void Call() 23 { 24 Console.WriteLine("使用智能手机打电话"); 25 } 26 27 public void SendMessage(string message) 28 { 29 Console.WriteLine("使用智能手机发送消息:" + message); 30 } 31 } 32 public abstract class HighPricePhone 33 { 34 public IMobilePhone MobilePhone { get; set; } 35 public HighPricePhone(IMobilePhone mobilePhone) 36 { 37 this.MobilePhone = mobilePhone; 38 } 39 public virtual void Call() 40 { 41 MobilePhone.Call(); 42 } 43 public virtual void SendMessage(string message) 44 { 45 MobilePhone.SendMessage(message); 46 } 47 public abstract void Cost(); 48 } 49 public class SunPhone : HighPricePhone 50 { 51 public override void Cost() 52 { 53 Console.WriteLine("it is soso"); 54 } 55 } 56 public class AppPhone : HighPricePhone 57 { 58 public override void Cost() 59 { 60 Console.WriteLine("it is not bad"); 61 } 62 }
总结
举的例子还是非常简单。如果不用桥接模式则会是智能手机继承至手机接口,高价智能手机(SunPhone,AppPhone)又继承至智能手机接口,当遇到再多的扩展时,我们再继承下去。那样的话就比较糟糕了。而当用桥接方式时,是一定维度的扩展变成组成的元素,通过内部调用方式去实现,不失为一个好的方案。