桥接模式之牛郎织女幸福牵手

简介:   这是一个很美丽的,千古流传的爱情故事,每到农历七月初七,相传牛郎织女鹊桥相会的日子,牛郎和织女被银河隔开,只允许每年的农历七月七日相见。为了让牛郎和织女能顺利相会。
  这是一个很美丽的,千古流传的爱情故事,每到农历七月初七,相传牛郎织女鹊桥相会的日子,牛郎和织女被银河隔开,只允许每年的农历七月七日相见。为了让牛郎和织女能顺利相会。各地的喜鹊就会飞过来用大家的身体紧贴着搭成一座桥,此桥就叫做鹊桥。牛郎和织女便在这鹊桥上相会。我就会抬头仰望星空,寻找银河两边的牛郎星和织女星,希望能看到他们一年一度的相会......
  在牛郎织女相会的过程中,喜鹊是功不可没的大臣,我们今天的设计模式就从鹊桥开始说起---桥接模式,顾名思义,在接口与实现之间,架设一座桥梁,这座桥,其实并非是为了过河,也不是为了让牛郎织女相会,那是人家喜鹊的事儿,咱要符合单一职责原则,干好自己的事儿,那就是将抽象部分与她的实现部分分离,使她都可以独立地变化。首先来看一下我们桥接模式的结构图:
  
 为了更好的理解桥接模式,我们再来举一个例子,走进南四楼的机房,你除了看到一个个认真敲代码的孩子之外,还会看到大家使用的电脑,有惠普,联想,操作系统有Win7、Win8,由此我们可以画一个类图,如下所示:
  
 全国人民都知道,电脑的品牌除了惠普和联想,还有戴尔、宏碁、华硕等;操作系统除了Win7和Win8之外,还有XP、Linux,如此一来,上面的结构图,似乎美中有着不足,改善一下我们的类图,如下:
    
   我们来分析一下上面的两张图,可以发现一个是用继承完成的,一种是用组合/聚合的方式完成的,而采用组合/聚合的方式就是所谓的抽象与实现分离。实际上在设计类时,我们应该首先考虑的是组合/聚合的方式,而不是考虑继承的方式,因为继承是一种强耦合关系,使用继承使得子类过多的依靠父类,接着,我们来看一下代码实现:
<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ComputerBrand ss;
            ss = new ComputerBrandH();

            ss.SetComputerOperatingSystem(new Win7() );
            ss.Run ();

            ss.SetComputerOperatingSystem(new Win8 ());
            ss.Run ();

            ss = new ComputerBrandL();

            ss.SetComputerOperatingSystem(new Win7() );
            ss.Run ();

            ss.SetComputerOperatingSystem(new Win8() );
            ss.Run ();

            Console .Read ();

        }
    }

    //电脑的操作系统系统
    abstract class  OperatingSystem
    {
        public abstract void Run();
    }

    //Win7.Win8系统等具体类
    //Win7操作系统
    class Win7:OperatingSystem
    {
        public override void Run()
        {
            Console.WriteLine("运行Win7系统");
        }
    }

    //Win8操作系统
    class Win8:OperatingSystem
    {
        public override void Run()
        {
            Console.WriteLine("运行Win8系统");
        }
    }

    //电脑品牌类
    //电脑品牌
    abstract class ComputerBrand
    {
        protected OperatingSystem OperatingSystem;
        //设置电脑系统
        public void SetComputerOperatingSystem (OperatingSystem OperatingSystem)
        {
            this.OperatingSystem = OperatingSystem;
        }

        //运行
        public abstract void Run();
    }

    //惠普和联想具体类
    //惠普
    class ComputerBrandH:ComputerBrand
    {
        public override void Run()
        {
            OperatingSystem.Run();
        }
    }

    //联想
    class ComputerBrandL:ComputerBrand
    {
        public override void Run()
        {
            OperatingSystem.Run();
        }
    }


}
</span>
         在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这个时候桥接模式就应用而生。牛郎织女通过鹊桥幸福牵手,而我们的桥接模式也在她的一方土地,起着她独特的作用......
 
目录
相关文章
|
8月前
|
设计模式 Java uml
初入职场的小黄利用外观模式,直接走上会所内模的道路
初入职场的小黄利用外观模式,直接走上会所内模的道路
|
算法 数据挖掘 物联网
小伙伴一起切蛋糕 思科挺进智慧城市
小伙伴一起切蛋糕 思科挺进智慧城市
165 0
小伙伴一起切蛋糕 思科挺进智慧城市
|
程序员
揭秘:一篇文章揭穿创业公司的套路
揭秘:一篇文章揭穿创业公司的套路
102 0
|
传感器 数据采集 监控
机器狗的烦恼:网红练习生容易,商业实习生好难
好比临近毕业正在找工作的实习生,波士顿动力的产品具备了基础理论知识,还缺少实践经验。
|
安全 网络安全 弹性计算
《安全说道》第三期 | 你家“大门”关好了吗?猪猪侠有话说
保护好企业的安全边界,即守好企业大门,是做好安全建设的第一步。
4527 0
IT技术晋级之路-宽带连接
驱动安装完,我们桌面可能就会有“宽带连接”的图标,没有的话在“网络”右键属性。 然后在“更改网络设置”下,点击“设置新的连接或网络” 出现上图后选择”连接到Internet”点击下一步 点击“宽带(PPPOE)” 输入运营商提供给您的信息 输入进去就好 如图是我设置好的 之后连接即可上网了。
1468 0
|
安全 网络安全