• 大话设计之桥接模式


          桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

          首先什么叫抽象与它的实现分离,不是说,让抽象类与其派生类分离,因为没有意义,实现指的是抽象类和它的派生类用来实现自己的对象。

          下面来看一段代码:

    class 桥接模式
        {
            static void Main(string[] args)
            {
                HandsetBrand ab;
                ab = new HandsetBrandN();
                
                ab.SetHandsetSoft (new HandsetGame() );
                ab.Run ();
    
                ab.SetHandsetSoft (new HandsetAddressList() );
                ab.Run ();
    
                ab=new HandsetBrandM ();
    
                ab.SetHandsetSoft (new HandsetGame() );
                ab.Run();
    
                ab.SetHandsetSoft (new HandsetAddressList() );
                ab.Run ();
    
                Console .Read ();
            }
        }
        abstract class HandsetSoft        //手机软件类
        {
            public abstract void Run();
        }
        class HandsetGame : HandsetSoft     //手机游戏类
        {
            public override void Run()
            {
                Console.WriteLine("运行手机游戏");
            }
        }
        class HandsetAddressList : HandsetSoft   //手机通讯录类
        {
            public override void Run()
            {
                Console .WriteLine ("运行手机通讯录");
            }
        }
        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 : HandsetBrand
        {
            public override void Run()
            {
                soft.Run ();
            }
        }
            如果增加MP3功能,只需要增加这个类就可以了:

         如下面代码:

    //手机MP3播放
        class HandsetMP3 : HandsetSoft
        {
            public override void Run()
            {
                Console.WriteLine("运行手机MP3播放");
            }
        }

          如果增加品牌只需要增加一个子类:S品牌。

     //手机品牌S
        class HandsetBrandS : HandsetBrand
        {
            public override void Run()
            {
                soft.Run();
            }
        }
              看上面的代码,想到了开放-封闭原则,这样不用修改原来的代码,只需要拓展类就可以了。

          继承是一种强耦合的结构,父类变,子类就会改变。对于桥接模式,理解为实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

  • 相关阅读:
    python经典算法面试题1.5:如何找出单链表中的倒数第K个元素
    python经典面试算法题1.4:如何对链表进行重新排序
    巧妙利用引用,将数组转换成树形数组
    设计模式学习笔记
    Vue-cli项目部署到Nginx
    设计模式
    设计模式
    springboot原理
    类加载机制-深入理解jvm
    JVM内存调优原则及几种JVM内存调优方法
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117989.html
Copyright © 2020-2023  润新知