概念

  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. 抛弃windows用linux来工作吧
  2. 关于Visual Basic 10.0
  3. Pandas的学习(2.Series的索引和切片、基本概念以及Series的运算)
  4. React Hook “useState“ is called in function xx which is neither a React function component or
  5. 从外网 SSH 进局域网,反向代理+正向代理解决方案
  6. 从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计
  7. Spring Boot学习总结(3)——SpringBoot魅力所在
  8. shell实现压缩多个文件
  9. windows安装安卓开发环境Eclipse+SDK+ADT
  10. 用RT Server Customizer定制Windows 2008 R2安装光盘
  11. atitit.sql server2008导出导入数据库大的表格文件... oracle mysql
  12. UA PHYS515A 电磁理论IV 时变电磁场理论4 电磁场的动量与麦克斯韦压缩能张量
  13. python微博_「Python」 - 微博数据分析
  14. 抖音私聊不封号技术,教你怎么避免踩雷?
  15. Docker容器运行
  16. linux的dlan脚本,Linux DLNA
  17. 前端学习之路-聚美优品注册页面的实现
  18. PHP:firebase/php-jwt生成jwt和验证
  19. 前后端分离实现上传图片的功能
  20. 腾讯云Ubuntu建FTP心得

热门文章

  1. myeclipse5.5注册码
  2. android服务下载,android服务之bindService和unService中下载任务中的应用
  3. java provider_Java SPI(Service Provider Interface)
  4. matlab把符号数,Matlab 符号与数值之间的转换
  5. java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别
  6. mysql主从进行扩展_MySQL 主从扩展
  7. php socketconnect连接失败_PHP设计模式之模板方法模式
  8. CPU Cache对于并发编程的影响
  9. Python | 字符串isdecimal(),isdigit(),isnumeric()和Methods之间的区别
  10. Java类class isAssignableFrom()方法及示例