模式简介

桥接模式用于将抽象与实现相分离,二者的变化相互独立互不影响。

模式UML图

代码示例(C#)

提示:可在本栏目的资源篇“设计模式代码示例合集”下载所有完整代码资源。

    //季节public enum Season{Spring, Summer, Autumn, Winter}//颜色public enum Color{Red, Blue, Orange, White, Black, Yellow, Green, Purple}public class Shirt : Clothes{public Shirt(string p_name, string p_material, Season p_applicableSeason, ColorDyer p_colorDyer) :base(p_name, p_material, p_applicableSeason, p_colorDyer){ }public override void Dressed(Man p_man){Console.WriteLine("------------------------------------");colorDyer.Dye();Console.WriteLine(p_man.name + " is wearing a " + colorDyer.color + " " + name + " made of " + material + " which is suitable for " + applicableSeason + " wear.");}}public class Sweater : Clothes{public Sweater(string p_name, string p_material, Season p_applicableSeason, ColorDyer p_colorDyer) :base(p_name, p_material, p_applicableSeason, p_colorDyer){ }public override void Dressed(Man p_man){Console.WriteLine("------------------------------------");colorDyer.Dye();Console.WriteLine(p_man.name + " is wearing a " + colorDyer.color + " " + name + " made of " + material + " which is suitable for " + applicableSeason + " wear.");}}public class ShortSleeve : Clothes{public ShortSleeve(string p_name, string p_material, Season p_applicableSeason, ColorDyer p_colorDyer) :base(p_name, p_material, p_applicableSeason, p_colorDyer){ }public override void Dressed(Man p_man){Console.WriteLine("------------------------------------");colorDyer.Dye();Console.WriteLine(p_man.name + " is wearing a " + colorDyer.color + " " + name + " made of " + material + " which is suitable for " + applicableSeason + " wear.");}}public class Jacket : Clothes{public Jacket(string p_name, string p_material, Season p_applicableSeason, ColorDyer p_colorDyer) :base(p_name, p_material, p_applicableSeason, p_colorDyer){ }public override void Dressed(Man p_man){Console.WriteLine("------------------------------------");colorDyer.Dye();Console.WriteLine(p_man.name + " is wearing a " + colorDyer.color + " " + name + " made of " + material + " which is suitable for " + applicableSeason + " wear.");}}public class RedDyer : ColorDyer{public RedDyer(Color p_color) : base(p_color) { }public override void Dye(){Console.WriteLine("The dress is dyed red.");}}public class OrangeDyer : ColorDyer{public OrangeDyer(Color p_color) : base(p_color) { }public override void Dye(){Console.WriteLine("The dress is dyed orange.");}}public class PurpleDyer : ColorDyer{public PurpleDyer(Color p_color) : base(p_color) { }public override void Dye(){Console.WriteLine("The dress is dyed purple.");}}public class WhiteDyer : ColorDyer{public WhiteDyer(Color p_color) : base(p_color) { }public override void Dye(){Console.WriteLine("The dress is dyed white.");}}public abstract class Clothes{public string name;public string material;public Season applicableSeason;protected ColorDyer colorDyer;public Clothes(string p_name, string p_material, Season p_applicableSeason, ColorDyer p_colorDyer){name = p_name;material = p_material;applicableSeason = p_applicableSeason;colorDyer = p_colorDyer;}public abstract void Dressed(Man p_man);}public abstract class ColorDyer{public Color color;public ColorDyer(Color p_color) { color = p_color; }public abstract void Dye();}public class Man{public string name;public Man(string p_name){name = p_name;}public void Walk(){Console.WriteLine("The man named " + name + " is walking.");Thread.Sleep(new Random().Next(3000));}}//测试代码public void Test(){Man jojo = new Man("JoJo");Man kaka = new Man("KaKa");RedDyer redDyer = new RedDyer(Color.Red);OrangeDyer orangeDyer = new OrangeDyer(Color.Orange);PurpleDyer purpleDyer = new PurpleDyer(Color.Purple);WhiteDyer whiteDyer = new WhiteDyer(Color.White);Shirt whiteShirt = new Shirt("Shirt", "cotton", Season.Spring, whiteDyer);Sweater orangeSweater = new Sweater("Sweater", "polyester-fiber", Season.Autumn, orangeDyer);ShortSleeve purpleShortSleeve = new ShortSleeve("ShortSleeve", "cotton", Season.Summer, purpleDyer);Jacket redJacket = new Jacket("Jacket", "polyester-fiber and cotton", Season.Winter, redDyer);whiteShirt.Dressed(jojo);redJacket.Dressed(jojo);purpleShortSleeve.Dressed(kaka);orangeSweater.Dressed(kaka);}

代码解说

我们简单模拟了一下衣服的染色过程,我们有Shirt、Sweater、ShortSleeve、Jacket四种类型的衣服,并且每种衣服都可以染Red、Orange、Purple、White四种不同的颜色,这样就会有16种组合,如果每种组合我们都去定义一个类就会出现类爆炸问题,所以我们就可以采用桥接模式,将衣服与染色先分开,二者分别创建一个基类Clothes和ColorDyer,四种衣服分别继承Clothes基类,四种染色器分别继承ColorDyer,但是我们在Clothes基类中定义一个ColorDyer,这里就实现了Clothes与ColorDyer的桥接模式,当我们制作一件衣服时需要通过一个染色器进行染色,当我们下次有一种新的衣服或新的染色器时只需要添加一个类即可,就不需要再定义四个类,这就是桥接模式的好处。

如果这篇文章对你有帮助,请给作者点个赞吧!

Bridge模式(桥接模式)相关推荐

  1. Bridge (桥接模式)

    文章目录 桥接模式 适用场景 UML 类图 代码实现 桥接模式 桥接模式(Bridge Pattern),也叫做桥梁模式,结构型设计模式的一种,这个模式相对来说有些难理解.桥接,顾名思义,就是用来连接 ...

  2. 《设计模式详解》结构型模式 - 桥接模式

    桥接模式 5.4 桥接模式 5.4.1 概述 5.4.2 结构 5.4.3 案例 5.4.4 使用场景 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! 结构型模式描述如何将类或对象按 ...

  3. 设计模式 — 结构型模式 — 桥接模式

    目录 文章目录 目录 桥接模式 应用场景 代码示例 桥接模式 桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来. (类)抽象部分(Abstraction): ...

  4. 组合模式 桥接模式 java_java设计模式5.组合模式、门面模式、享元模式、桥接模式...

    组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...

  5. vmware虚拟机 配置动态 静态 固态IP 三种模式: 桥接模式 nat模式和仅主机模式 Host-only模式

    目录 目录 一. 安装了图形化桌面操作系统时 一.桥接模式 二.nat模式 三.host-only模式 二.没有桌面操作系统时(centos 7) 1.Bridged模式(桥接模式) 2.Nat模式( ...

  6. 进阶学习(3.9) Bridge Pattern 桥接模式

    1, 什么是桥接 桥,  提供给两方, 或者多方相交汇的作用, 例如, A 函数想调用 B 函数, 常见的方法就是, 直接在A 中显式 调用B, 这样存在高耦合,  如果我们使用一个中间函数C, 在C ...

  7. NAT模式 桥接模式bridge原理理解

    桥接场景 无论现在的各种容器,还是我们之前常用的虚拟机,为了与局域网内其他IP通讯通常需要用到『桥接』. Bridge桥接方式 Bridge 将虚拟机桥接到host机器的网卡上,guest和host机 ...

  8. 结构型模式 - 桥接模式Bridge

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 桥接模式的定义与特点 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现 ...

  9. 不得不说的结构型模式-桥接模式

    桥接模式(Bridge Pattern)是一种结构型设计模式,它可以将抽象部分与实现部分分离,使得它们可以独立地变化.桥接模式的核心思想是将一个系统分成两个独立的部分,抽象部分和实现部分,并且让它们可 ...

  10. 结构型模式——桥接模式

    一. 实验目的与要求 1.练习使用桥接模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 相信大家都看过罗老师买 ...

最新文章

  1. Directx11教程(6) 画一个简单的三角形(2)
  2. dojo中 xhr.post向后台传参出现乱码
  3. 自回归AR模型、移动平均MA模型、自回归移动平均ARMA模型
  4. 关于Debug.exe
  5. 如何成为一个C++高级程序员
  6. Scratch(四十八):植物大战僵尸
  7. 怎么用计算机拨号手机,手机怎么连接电脑拨号打电话
  8. 应用变量(原名-型号伪装)
  9. Android自定义组件之日历控件-精美日历实现(内容、样式可扩展)
  10. Unity3d坦克大战联网
  11. 区块链服务网络(BSN)技术详解
  12. 艾美捷SequENZ测序级改造型胰蛋白酶特异性和应用
  13. 千里眼-智行千里,眼见为实 源码分享
  14. 删除PDF文件中的空白页面
  15. iOS内容含有隐藏功能、第三方支付等被拒4次的心路历程
  16. [Realtek sdk3.4.14b] RTL8197FH-VG设备启动之后,2.4G WiFi始终工作在20M 11g模式问题处理
  17. 【luogu1468】[Violet]蒲公英--求区间众数
  18. 机智云物联网荣获“2021年度广州创新力大奖”
  19. spring boot + maven使用profiles进行环境隔离
  20. HEVC学习之率失真优化

热门文章

  1. PAT 乙级 1107 老鼠爱大米
  2. android 请求https接口
  3. 解决MySQL_python-1.2.5-cp27-none-win_amd64.whl is not a supported wheel on this platform.(win10)
  4. python list输出去掉中括号_Python 输出时去掉列表元组外面的方括号与圆括号的方法...
  5. python去除列表中的引号和两端括号
  6. mongoTemplate增删改查
  7. 线性非时变系统理论(LTI系统理论)
  8. 自动控制原理第5章——频率法(思维导图)
  9. 2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题二python代码实现(更新完毕)
  10. cdn服务器是什么意思?CDN服务器干什么的?