桥接模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。一个类存在两个独立变化的维度,而且两个维度都需要进行扩展的时候,可以使用桥接模式

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();
        }
原文地址:https://www.cnblogs.com/amywechat/p/4936219.html