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

简介:   这是一个很美丽的,千古流传的爱情故事,每到农历七月初七,相传牛郎织女鹊桥相会的日子,牛郎和织女被银河隔开,只允许每年的农历七月七日相见。为了让牛郎和织女能顺利相会。
  这是一个很美丽的,千古流传的爱情故事,每到农历七月初七,相传牛郎织女鹊桥相会的日子,牛郎和织女被银河隔开,只允许每年的农历七月七日相见。为了让牛郎和织女能顺利相会。各地的喜鹊就会飞过来用大家的身体紧贴着搭成一座桥,此桥就叫做鹊桥。牛郎和织女便在这鹊桥上相会。我就会抬头仰望星空,寻找银河两边的牛郎星和织女星,希望能看到他们一年一度的相会......
  在牛郎织女相会的过程中,喜鹊是功不可没的大臣,我们今天的设计模式就从鹊桥开始说起---桥接模式,顾名思义,在接口与实现之间,架设一座桥梁,这座桥,其实并非是为了过河,也不是为了让牛郎织女相会,那是人家喜鹊的事儿,咱要符合单一职责原则,干好自己的事儿,那就是将抽象部分与她的实现部分分离,使她都可以独立地变化。首先来看一下我们桥接模式的结构图:
  
 为了更好的理解桥接模式,我们再来举一个例子,走进南四楼的机房,你除了看到一个个认真敲代码的孩子之外,还会看到大家使用的电脑,有惠普,联想,操作系统有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>
         在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这个时候桥接模式就应用而生。牛郎织女通过鹊桥幸福牵手,而我们的桥接模式也在她的一方土地,起着她独特的作用......
 
目录
相关文章
|
3月前
|
存储 机器学习/深度学习 人工智能
阿里云环境下 Runway 深度部署:从技术原理到 AIGC 视频生成落地
Runway作为AI视频生成标杆,融合扩散模型与多模态技术,依托潜空间优化与时空注意力机制,实现高效高质视频生成。结合阿里云算力与API生态,支持版权合规、运镜控制与多模态联动,广泛应用于影视、广告与游戏领域,推动内容创作智能化升级。
624 0
|
9月前
|
JSON 数据管理 Java
淘宝买家订单列表、订单详情、订单物流 API 接口全攻略
淘宝订单相关API接口是电商自动化的核心工具,提供订单数据管理和物流追踪功能。开发者可通过HTTP协议调用,支持Python、Java等语言,响应JSON格式数据。主要功能包括:订单列表查询、订单详情获取和物流轨迹追踪。申请流程:注册账号(c0b.cc/R4rbK2),创建应用并生成App Key,申请所需接口权限如taobao.trades.sold.get、taobao.trade.fullinfo.get等。
1412 7
|
监控 NoSQL Java
Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题
Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题
1029 0
Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题
|
C++
2023_4_23_VS下Release怎么打断点进行debug
2023_4_23_VS下Release怎么打断点进行debug
373 0
|
人工智能
stm32f407探索者开发板(三)——GPIO工作原理(内部结构说明、八种输入输出分析、GPIO寄存器说明)(下)
stm32f407探索者开发板(三)——GPIO工作原理(内部结构说明、八种输入输出分析、GPIO寄存器说明)(下)
598 0
stm32f407探索者开发板(三)——GPIO工作原理(内部结构说明、八种输入输出分析、GPIO寄存器说明)(下)
|
分布式计算 Kubernetes 大数据
阿里云容器服务差异化 SLO 混部技术实践
阿里巴巴在“差异化 SLO 混合部署”上已经有了多年的实践经验,目前已达到业界领先水平。所谓“差异化 SLO”,就是将不同类型的工作负载混合运行在同一节点,充分利用工作负载对资源 SLO 需求特征的不同,提升资源整体使用效率。本文将重点介绍相关技术细节和使用方法,让用户可以充分享受差异化 SLO 带来的技术红利。
阿里云容器服务差异化 SLO 混部技术实践
|
移动开发 开发框架 JavaScript
mPaas-H5容器与离线包介绍
mPaaS移动开发框架提供了一套完整的混合应用(Hybrid)开发解决方案,包括客户端的H5容器组件和服务端的离线包发布管理平台。 H5 Web应用的特点是开发效率高,但受制于Web技术和HTTP协议的限制,在移动端的表现差强人意。Native应用的优势在于性能,但是动态更新的能力较弱。Hybrid方案的出现正是为了调和这两者矛盾并发挥两者的优势,其核心技术能力包括:H5离线技术和JSBridge技术。简单来说,H5离线技术就是将HTML/CSS/JS和资源文件等打包提前下发到App中,使得App在加载H5应用时可以直接从本地读取资源文件,避免了大量的网络资源请求,从而提高H5应用的加载效率;
1322 0
mPaas-H5容器与离线包介绍
|
消息中间件 机器学习/深度学习 弹性计算
阿里云高庆瑞:如何快速搭建低成本高弹性的云上应用
通过弹性伸缩,保证业务稳定性,同时降低成本
阿里云高庆瑞:如何快速搭建低成本高弹性的云上应用
|
敏捷开发 前端开发 项目管理
在YesDev研发协同工具,项目协作 All In One
值得注意的是,YesDev中所定义和提倡的项目,是指在一定时间周期内完成的有限需求、任务和问题的集合,对应敏捷开发中的一次迭代或Scrumn的一个Sprint。