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

这是一个很美丽的,千古流传的爱情故事,每到农历七月初七,相传牛郎织女鹊桥相会的日子,牛郎和织女被银河隔开,只允许每年的农历七月七日相见。为了让牛郎和织女能顺利相会。各地的喜鹊就会飞过来用大家的身体紧贴着搭成一座桥,此桥就叫做鹊桥。牛郎和织女便在这鹊桥上相会。我就会抬头仰望星空,寻找银河两边的牛郎星和织女星,希望能看到他们一年一度的相会......

在牛郎织女相会的过程中,喜鹊是功不可没的大臣,我们今天的设计模式就从鹊桥开始说起---桥接模式,顾名思义,在接口与实现之间,架设一座桥梁,这座桥,其实并非是为了过河,也不是为了让牛郎织女相会,那是人家喜鹊的事儿,咱要符合单一职责原则,干好自己的事儿,那就是将抽象部分与她的实现部分分离,使她都可以独立地变化。首先来看一下我们桥接模式的结构图:

为了更好的理解桥接模式,我们再来举一个例子,走进南四楼的机房,你除了看到一个个认真敲代码的孩子之外,还会看到大家使用的电脑,有惠普,联想,操作系统有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>

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这个时候桥接模式就应用而生。牛郎织女通过鹊桥幸福牵手,而我们的桥接模式也在她的一方土地,起着她独特的作用......

桥接模式之牛郎织女幸福牵手,布布扣,bubuko.com

时间: 2024-10-08 10:04:07

桥接模式之牛郎织女幸福牵手的相关文章

设计模式 -- 桥接模式(Bridge Pattern)

桥接模式 Bridge Pattern 结构设计模式 定义: 分离抽象部分和实现部分,使他们独立运行. 避免使用继承导致系统类个数暴增,可以考虑桥接模式. 桥接模式将继承关系转化为关联关系,减少耦合,减少代码量. 例如: public interface Shape { public void bepaint(String color); } public abstract class Color { Shape shape; public void setShape(Shape shape)

设计模式——桥接模式

场景,我们需要给不同的电视厂商,比如长虹.TCL.三星等等生产电视遥控器.他们提供各自电视机遥控功能的实现,并且遵循一样的标准. 我们制作一个长虹的遥控器,选择最直接的方式,继承长虹类,然后利用长虹类提供的方法,实现遥控器功能. 在这个遥控器中,我们提供了新功能,比如 1)将开和关放在一个按钮 2)下一个频道 3)上一个频道 public class CHTvControl extends CHControl implements TvControl{ private static int ch

浅说解决VMware桥接模式连接主机

内容概要: 1: 搞懂VMware的桥接,NAT,HostOnly三种模式的意义. 2: 分别示范,CentOS 6,CentOS 7的手动分配固定虚拟机的IP地址. 3: 使用桥接方法ping通主机,并用Xshell远程控制. 解决的问题: 1: 虚拟机上不了网. 2: 无法ping通主机或远程连接. 3: 网卡启动总是失败,报错. 写作目的: 初装linux后,我们会习惯性的ping一下主机,看看虚拟机是否和主机连接正常,若正常便会迫不及待的用Xshell远程连接虚拟机,进行验证并操作.可安

9,桥接模式(Bridge Pattern)是将抽象部分与实际部分分离,使它们都可以独立的变化。

Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任. 它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展.  适用于: 桥接模式(Bridge Pattern)是将抽象部分与实现部分分离(解耦合),使它们都可以独立的变化. 车 安装 发动机 :不同型号的车,安装不同型号的发动机        将"车

【结构型模式】《大话设计模式》——读后感 (13)手机软件何时能统一?——桥接模式

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变换[DP] 概述:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 桥接模式的基本代码: 唯独一: AbstractCar: package com.sjmx.bridge; public abstract class AbstractCar { void r

6 结构型模式之 - 桥接模式

桥接模式的介绍:桥接模式,也称为桥梁模式,是结构型设计模式之一,在现实tgitk大家都知道"桥梁"是连接河道两岸的主要交通枢纽,简而言之其作用就是连接河的两边,而我们的桥梁模式与现实中的情况很是相似,也是承担着连接两边的作用. 桥接模式的定义:将抽象部分与实现部分分离,使它们都可以独立地进行变化 格拉模式的使用场景:从模式的定义中我们大致可以了解到,这里"桥梁"的作用其实就是连接"抽象部分"与"实现部分",但是事实上,任何多维

Java设计模式:桥接模式

问题提出 生活中有很多事物集合,设为A1,A2......Am ,而每个事物都有功能F1,F2....Fn. 例如邮局的发送业务.简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能.程序设计中如何来描述这些功能呢?或许一般会与下面代码相似. public class A1 { void F1(){} void F2(){} } public class A2 { void F1(){} void F2(){} } 很明显,若有m个事物,n个功能,按照这个方法,一共要写m个类,功能方法累积起来

java设计模式之桥接模式

桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类.这两种类型的类可被结构化改变而互不影响.我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法.其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆. 桥接模式所涉及的角色有:抽象化(Abstraction)角色:抽象化给出的

桥接模式

一.目录概要 二.场景问题 假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决?我们初学者最容易想到的办法就是利用继承的方式,那利用继承实现的类图又是什么样子呢?我们看图. 代码展示 package com.aaron.bridge; public interface Computer { public void sale(); } class Desktop implements Computer{ @Override public void sale(