在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。一个类存在两个独立变化的维度,而且两个维度都需要进行扩展的时候,可以使用桥接模式
1.不同品牌手机要安装不同的手机软件(注意:高层要引用底层,三层架构中就运用了桥接模式,BLL层中通过桥接模式与DAL解耦,其实现方式就是BLL层中添加了DAL层的引用,这样数据库底层的改变就不会影响客户端的实现了)
定义手机软件(底层)抽象类和具体软件类
/// <summary> /// 手机软件 /// </summary> public abstract class HandsetSoft { public abstract void Run(); } /// <summary> /// 手机游戏 /// </summary> public class HandsetGame : HandsetSoft { public override void Run() { Console.WriteLine("运行手机游戏"); } } /// <summary> /// 手机通讯录 /// </summary> public class HandsetAddressList : HandsetSoft { public override void Run() { Console.WriteLine("运行手机通讯录"); } }
定义手机品牌(高层)抽象类和具体品牌类
/// <summary> /// 手机品牌 /// </summary> public abstract class HandsetBrand { protected HandsetSoft soft; /// <summary> /// 品牌需要关注软件,所以可在机子中安装软件 /// </summary> public void SetHandsetSoft(HandsetSoft soft) { this.soft = soft; } public abstract void Run(); } /// <summary> /// 手机品牌M /// </summary> public class HandsetBrandM : HandsetBrand { public override void Run() { this.soft.Run(); } } /// <summary> /// 手机品牌N /// </summary> public class HandsetBrandN : HandsetBrand { public override void Run() { this.soft.Run(); } }
开启场景模拟
static void Main(string[] args) { HandsetBrand ab = new HandsetBrandM(); ab.SetHandsetSoft(new HandsetGame()); ab.Run(); ab.SetHandsetSoft(new HandsetAddressList()); ab.Run(); }