设计模式之结构型(4)-桥接模式(Bridge)
(一)定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。(将一个对象多维度的变化分离)
① 桥接模式主要用意是为了实现抽象部分与实现部分脱耦,使它们各自可以独立变化。
② 在开发过程中通常会遇到一个对象有两个变化维度,而且这两个维度变化地非常剧烈,这种变化导致了纵横交错的结果,使对象的设计变得困难,并且在对象数量上和可扩展性上都带来了很大的麻烦。此时我们应当把这两个变化比较剧烈的维度拆离,然后用组合的方式把它们结合在一起。这就是桥接器模式的思想
相关模式:适配器模式,策略模式
1.1 UML定义类图
1.2 类的定义
示例
场景一:假设用蜡笔画一幅画。要使用12种颜色,且有大中小号蜡笔来画,则需要36种不同的蜡笔。但是如果我们用大中小三种不同的毛笔,再配上12种不同的颜色。则只需要12+3=15个对象就可以完成绘画。
实际上,蜡笔和毛笔的关键一个区别在于笔和颜色是否能够分离。桥梁模式的用意是“将抽象化与实现化脱耦,使得二者可以独立地变化”。关键就在于能否脱耦。蜡笔的颜色和蜡笔本身是分不开的,所以造成必须使用36支色彩、大小各异的蜡笔来绘制图画。而毛笔与颜料能够很好的脱耦,各自独立变化,便简化了操作。在这里,抽象层面的概念是:“毛笔用颜料作画”,而在实现时,毛笔有大中小三号,颜料有红绿蓝等12种,于是便可出现3*12种组合。每个参与者(毛笔与颜料)都可以在自己的自由度上随意转换。
蜡笔由于无法将笔与颜色分离,造成笔与颜色两个自由度无法单独变化,使得只有创建36种对象才能完成任务。桥接模式将继承关系转换为组合关系,从而降低了系统间的耦合,减少了代码编写量。
代码public abstract class Brush {protected Color c;public abstract void Paint();public Color Color{set { c = value; }} }public class BigBrush : Brush {public override void Paint(){Console.WriteLine("使用大号毛笔和颜色:{0} 绘画", c.Name);} }public class SmallBrush : Brush {public override void Paint(){Console.WriteLine("使用小号毛笔和颜色:{0} 绘画", c.Name);} } public class Color {public string Name { get; set; } }public class Red : Color {public Red(){base.Name = "Red";} }public class Blue : Color {public Blue(){base.Name = "Blue";} }//Main客户端调用程序 static void Main(string[] args) {Brush brush1 = new BigBrush();brush1.Color = new Red();brush1.Paint();Brush brush2 = new SmallBrush();brush2.Color = new Blue();brush2.Paint();Console.ReadKey(); }
转载于:https://www.cnblogs.com/lihuali/p/7492940.html
设计模式之结构型(4)-桥接模式(Bridge)相关推荐
- Java设计模式之结构型:桥接模式
一.什么是桥接模式: 桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥.在现实生活中一个物品在搭配不同的配件时会产生不同的动作和结果, ...
- 【设计模式·结构型】桥接模式Bridge Pattern
目的 该模式用于分离抽象与实现,并且抽象与实现可以独立变化 应用场景 (1)希望抽象和实现之间没有固定的绑定关系,不同抽象接口和实现可以组合和扩充,程序运行时动态选择.切换具体实现 (2)类层次结构, ...
- Java设计模式之结构型:组合模式
前言: 我们对于上面两幅图片肯定非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构.在数据结构中我们知道可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可 ...
- Java设计模式之结构型:外观模式
一.什么是外观模式: 外观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口.使用外观模式有以下几点好处: (1)更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要 ...
- Java设计模式之结构型:代理模式
前言: 我们一般在租房子时会去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做:再比如我们打官司需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们 ...
- 围观设计模式(16)--结构型之组合模式(Composite Pattern)
组合模式也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系,其定义为:将对象组合成树形结构以表示"整体与部分"的层次结构,使得用户对单个对象和组合对象的使用具有 ...
- Java设计模式之结构型:享元模式
一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...
- Java设计模式之结构型:装饰器模式
一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...
- Java设计模式之结构型:适配器模式
一.什么是适配器模式: 适配器模式主要用于将一个类的接口转化成客户端希望的目标类格式,使得原本不兼容的类可以在一起工作,将目标类和适配者类解耦:同时也符合"开闭原则",可以在不修改 ...
最新文章
- 网络测试三要素 识别 验证 认证
- Repeating Cipher
- 《数据驱动安全:数据安全分析、可视化和仪表盘》一1.2.4 统计学
- 一个USB HUB电路分享
- 关于resolve非泛型方法不能与类型实参一起使用
- 不允许更改采购订单币种
- eclipse 设置默认编码为Utf-8
- php查询mysql增加模板消息_php 实现发送微信模板消息
- 哈工大本部2022形式语言与自动机期末试题
- 掌控人生的姑娘,从不活在PS里
- ROS学习笔记(二)launch文件初步使用
- [转]2014年最新810多套android源码2.46GB免费一次性打包下载
- 如何寻求知识产权的刑事救济
- UGUI源码解析——ContentSizeFitter
- 利用Python根据模板生成Word文档
- Android studio emulator 无法打开的解决办法
- 广东某银行基于阿凡搭在信创环境下打造全行科技一体化服务平台
- linux压缩文件命令_24.gzip、unzip命令详解 - 钟桂耀
- IDEA连接达梦数据库
- 技术博客|第15期:流媒体传输协议简介 - HLS协议
热门文章
- Android内存分析和调优
- golang中的读写锁
- 运算符中,优先级高低总结。
- float x 与“零值”比较的if语句为?
- Jsp(Java Server Pages)简介
- springmvc五:使用pojo作为参数
- oracle: to_char,to_date
- Python之路--前端知识--JavaScript
- mac connect to host localhost port 22: Connection refused
- Python数据可视化2.6 一些最好的可视化实践