概念

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

角色和职责

Client

Bridge模式的使用者

Abstraction

抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用

Refined Abstraction

Abstraction子类

Implementor

行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)

ConcreteImplementor

  Implementor子类

 适用于:

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

车 安装 发动机 ;不同型号的车,安装不同型号的发动机

图形 填 颜色    不同形状的图形,填充上 不同的颜色

将“车 安装 发动机”这个抽象 和 实现进行分离;两个名字 就设计两个类;

将“图形 填 颜色”这个抽象 和 实现 进行分离,两个名字,就设计两个类

案例

//不同的车型,不同型号,安装不同类型的发动机

#include <iostream>
using namespace std;class MyCar1
{
public:virtual void installEngine() = 0;
};class BMW5 : public MyCar1
{
public:virtual void installEngine(){cout << "BMW5 3500CC" << endl;}
};class BMW6 : public MyCar1
{
public:virtual void installEngine(){cout << "BMW6 4000CC" << endl;}
};class Jeep11 : public MyCar1
{
public:virtual void installEngine(){cout << "Jeep11 1100CC" << endl;}
};class Jeep12 : public MyCar1
{
public:virtual void installEngine(){cout << "Jeep12 1200CC" << endl;}
};//不同的车型,不同型号,安装不同类型的发动机,会引起子类的泛滥
//问题引出
void main1601()
{Jeep12 *j12 = new Jeep12;j12->installEngine();delete j12;return ;
}class MyCar2
{public:virtual void installEngine3500() = 0;virtual void installEngine4000() = 0;virtual void installEngine1100() = 0;virtual void installEngine1200() = 0;
};class BMW : public MyCar2
{
public:virtual void installEngine3500(){cout << "3500CC" << endl;}virtual void installEngine4000(){cout << "4000CC" << endl;}virtual void installEngine1100() {cout << "1100CC" << endl;}virtual void installEngine1200(){cout << "1200CC" << endl;}
};//这样的设计 不符合开闭原则
void main1602()
{BMW *bmw5 = new BMW;bmw5->installEngine3500();
}//需要把“安装发动机”这个事,做很好的分解;把抽象 和 行为实现 分开
//发动机是一个名次,专门抽象成一个类;类中含有一个成员函数,安装发动机class Engine
{
public:virtual void installEngine() = 0;
};class Engine4000 : public Engine
{
public:virtual void installEngine(){cout << "安装发动机 Engine4000" << endl;}
};class Engine3500 : public Engine
{
public:virtual void installEngine(){cout << "安装发动机 Engine 3500" << endl;}
};class Car
{
public:Car(Engine *pengine){m_engine = pengine;}virtual void installEngine() = 0;protected:Engine *m_engine;
};class BMW7 :public Car
{
public:BMW7(Engine *p) : Car(p){}//注意车的安装  和 发动机的安装 不同之处virtual void installEngine(){cout << "BMW7 " ; m_engine->installEngine();}
protected:
private:
};void main163()
{Engine4000 *e4000 = new Engine4000;BMW7 *bmw7 = new BMW7(e4000);bmw7->installEngine();delete bmw7;delete e4000;
}
void main()
{//main1601();//main1602();main163();system("pause");
}

  

转载于:https://www.cnblogs.com/gd-luojialin/p/10357987.html

13结构型模式之桥接模式相关推荐

  1. 【设计模式学习笔记】组合模式与桥接模式案例详解(C++实现)

    目录 一.组合模式 1. 什么是组合模式 2. 组合模式案例 二.桥接模式 1. 什么是桥接模式 2. 桥接模式案例 一.组合模式 1. 什么是组合模式 Composite Pattern,组合模式, ...

  2. 结构型模式之桥接模式的案例示范

    1. 桥接模式介绍 桥接模式的主要作用就是通过将抽象部分与实现部分分离,把多种可匹配的使用进行组合.说白了核心实现就是A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥. 桥接模式在 ...

  3. Java设计模式之结构型:享元模式

    一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...

  4. Java设计模式之结构型:装饰器模式

    一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...

  5. 结构型设计模式之组合模式

    结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...

  6. 设计模式自学笔记007_Real(命令模式、备忘录模式、桥接模式)

    设计模式自学笔记007_Real(命令模式.备忘录模式.桥接模式) 一.命令模式 在软件设计的过程中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道请求的操作是哪个.我们只需要 ...

  7. 虚拟机的三种可选模式:桥接模式、NAT模式、主机模式浅析

    一.问题场景 在配置虚拟机的时候,往往有三种可供选择的网络模式:桥接模式.NAT模式.主机模式浅析.查阅了有关的资料,在下面对这三种模式做一下区分. 二.区别 假设在网段为 192.168.100.x ...

  8. 虚拟机的安装和linux操作系统(RedHat.8.5)的安装。将虚拟机的网络连接模式分别调换成仅主机模式,nat模式,桥接模式并获取ip地址使用ssh通过不同用户远程连接。在linux系统下破解密码

    目录 一.在VMware上如何创建虚拟机以及安装linux操作系统. 二.修改主机名为server.local. 三.将虚拟机的网络连接模式分别调换成仅主机模式,nat模式,桥接模式并获取ip地址使用 ...

  9. VMware虚拟网络设置(NAT模式,桥接模式,仅主机模式设置),再也不用担心虚拟机连不上网了。

    前言: 在使用VMware安装Linux之前需要配置网络相关设置,不然安装成功了也无法联网,VMware 给我们提供了3种模式,NAT模式,桥接模式,仅主机模式.接下来就是怎么设置这些网络. 1.VM ...

  10. 虚拟机网络连接模式中桥接模式和NAT模式的区别

    1.桥接模式:当虚拟机系统的网络连接模式为桥接模式时,相当于在主机系统和虚拟机系统之间连接了一个网桥,而网桥两端的网络都属于同一网络,主机和虚拟机是处于同一网络中的对等主机. 实例,在使用Xshell ...

最新文章

  1. 2021-2027年中国玩具行业市场研究及前瞻分析报告
  2. Java基础05 实施接口
  3. 剪绳子python_Python剪绳子如何实现 Python剪绳子实现代码
  4. CSS3之计算长度值------calc()
  5. Vue 2.0 v-for 响应式key, index及item.id参数对v-bind:key值造成差异研究
  6. org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
  7. k8s 查看ip地址属于哪个pod_一个简单的例子理解Kubernetes的三种IP地址类型
  8. Spring核心初探~
  9. mysql修改密码5.7_mysql数据库5.7版修改密码详细(centos7)
  10. 【渝粤教育】电大中专工程图学基础 (2)作业 题库
  11. python2020个税_2020年你会算个人所得税吗?没关系,python脚本帮助你!
  12. 深度学习入门之二阶段小demo练习(持续更新系列)
  13. 2019FME博客大赛——FME在室内地图数据构建中的应用
  14. (已更新)成语小秀才小程序V2.0.14完整安装包+小程序前端
  15. 在函数前面加上WINAPI、CALLBACK等是什么意思
  16. 《麦田里的守望者》阅读笔记
  17. VMware宿主机与虚拟机之间的文件夹相互共享(看图操作)
  18. 星际文件系统新动作——建立存储供应商赏金委员会
  19. 程序功能:输入一个长整数n,从高位开始逐位分离并输出。 例如输入123456
  20. 全面讨论泛化 (generalization) 和正则化 (regularization) — Part 1

热门文章

  1. linux用户操作的日志,linux 用户操作记录并录入日志
  2. java 服务器读取客户端文件,java 服务器读取客户端文件
  3. php 水平测试,测试您的 PHP 水平的题目_PHP教程
  4. spring 事务隔离级别和传播行为_Spring事务传播性与隔离性实战
  5. python fieldnames_csvreader.fieldnames在python中未被识别为csv reader对象的属性
  6. linux 内存取证_【取证流程】电子数据证据远程勘验
  7. java务必让常量的值在运行期保持不变
  8. Opencv实现利用滑动条来调整阈值
  9. c ++递归算法数的计数_C ++程序使用数组中的递归查找数字的最后一次出现
  10. java vector_Java Vector elements()方法与示例