桥接模式:将抽象部分和它的实现部分分离,使他们可以独立的变化。实现指的是抽象类和它的派生类用来实现自己的对象。如手机软件和品牌分开实现。已达到松耦合的目地。
合成聚合复用原则:聚合是弱的“拥有关系”,体现A对象可以包含B对象,但B对象不是A对象的一部分 如:大雁和雁群
合成是强的“拥有关系”,体现了严格的整体和部分的关系部分和整体的生命周期一致,如:大雁和燕翅
桥接模式采用的是聚合原则,将手机品牌和手机软件分开设计
本实例以手机品牌和手机软件为例:
手机软件抽象类(PhoneSoft)
namespace BridgePattern.CLASS { abstract class PhoneSoft { public abstract void Run(); } }
通讯录(PhoneAddressList)继承于手机软件抽象类
namespace BridgePattern.CLASS { class PhoneAddressList:PhoneSoft { public override void Run() { Console.WriteLine("打开手机通讯录"); } } }
游戏类(PhoneGame)继承于手机软件抽象类
namespace BridgePattern.CLASS { class PhoneGame:PhoneSoft { public override void Run() { Console.WriteLine("运行手机游戏!"); } } }
手机品牌抽象类(PhoneBrands)
namespace BridgePattern.CLASS { abstract class PhoneBrands { //关键代码 protected PhoneSoft soft; public void SetPhoneSoft(PhoneSoft soft) { this.soft = soft; } public abstract void Run(); } }
手机品牌N(PhoneBrandN)继承于手机品牌抽象类
namespace BridgePattern.CLASS { class PhoneBrandN:PhoneBrands { public override void Run() { soft.Run(); } } }
手机品牌M(PhoneBrandM)继承于手机品牌抽象类
namespace BridgePattern.CLASS { class PhoneBrandM:PhoneBrands { public override void Run() { soft.Run(); } } }
测试类(TestMain)
namespace BridgePattern { class TestMain { static void Main(string[] args) { Console.WriteLine("------N牌手机功能------"); PhoneBrands pbN = new PhoneBrandN(); pbN.SetPhoneSoft(new PhoneGame()); pbN.Run(); pbN.SetPhoneSoft(new PhoneAddressList()); pbN.Run(); Console.WriteLine("------M牌手机功能------"); PhoneBrands pbM = new PhoneBrandM(); pbM.SetPhoneSoft(new PhoneGame()); pbM.Run(); pbM.SetPhoneSoft(new PhoneAddressList()); pbM.Run(); } } }
此方式无论增加品牌还是增加软件互相不会受影响,降低了代码的耦合度
要么忍,要么狠,要么滚!