桥接模式

对象的继承关系是在编译的时候就定义好的,所以无法在运行时改变从父类集成的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类的时候,如果继承下来的实现并不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

组合优于继承的体现

    abstract class Handsetsoft
    {
        public abstract void Run();
    }

    class HandsetAddressList : Handsetsoft
    {
        public override void Run()
        {
            Console.WriteLine("运行手机通信录");
        }
    }

    class HandsetGame : Handsetsoft
    {
        public override void Run()
        {
            Console.WriteLine("手机能够运行游戏");
        }
    }

    //使用桥接模式,将原本所应继承的Handsetsoft接口,通过组合的方式引入进来,这样当接口中的内容发生变化的时候,就不需要更改所有实现接口的子类。
    //这也就是为什么书中并没有使用接口而是使用抽象类来定义接口,因为这样就无法让新生成的手机品牌(HandsetBrandN)既能继承HandsetBrand,同时还能继承Handsetsoft。
   abstract class HandsetBrand
   {
       protected Handsetsoft soft;
       //设置手机软件
       public void SetHandsetSoft(Handsetsoft soft) {
           this.soft = soft;
       }
       public abstract void Run();
    }

    //使用桥接模
    class HandsetBrandN : HandsetBrand
    {
        public override void Run()
        {
            soft.Run();
        }
    }
    //使用继承的方式
    class HandsetBrandM : Handsetsoft, HandsetBrand
    {
        //todo……继承并实现接口中的内容。
        //当接口中的功能新增的时候,那么以前写好的代码,都要去实现新增的接口,当类多的时候,就会很麻烦。
    }

    class Program
    {
        static void Main(string[] args)
        {
            HandsetBrand ab = new HandsetBrandN();
            ab.SetHandsetSoft(new HandsetGame());
            ab.Run();

            ab.SetHandsetSoft(new HandsetAddressList());
            ab.Run();
        }
    }
原文地址:https://www.cnblogs.com/vichin/p/11592877.html