zoukankan      html  css  js  c++  java
  • 大话设计之桥接模式

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

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

          下面来看一段代码:

    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();
            }
        }
              看上面的代码,想到了开放-封闭原则,这样不用修改原来的代码,只需要拓展类就可以了。

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

  • 相关阅读:
    leetcode(5)-罗马数字转整数
    leetcode(4)-整数反转
    leetcode(3)-回文数
    leetcode(2)-有效的括号
    leetcode(1)-两数之和
    HTTP基础(一)
    ubuntu 18.04安装MariaDB 10.04并通过远程navicat连接
    ubuntu18.04 root用户登录
    xshell连接ubuntu虚拟机
    ubuntu18.04使用node压缩包的安装及配置
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117989.html
Copyright © 2011-2022 走看看