一、UML图

二、概念

桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都能够独立地变化。

三、说明

为什么叫“桥接模式”?

如上所看到的的UML图中,有一个聚合线,像一座桥。所以叫“桥接模式”。

概念解释:

什么叫抽象与它的实现分离,这并非说。让抽象类与其派生类分离。由于这没有不论什么意义。实现指的是抽象类与它的派生类用来实现自己的对象。

为什么要优先使用合成/聚合原则?

(1)对象的继承关系是在编译时就定义好了的。所以无法再执行时改变从父类继承的实现。子类的实现与它的父类有很紧密的依赖关系。以至于父类实现的不论什么变化必定会导致子类发生变化。当你须要复用子类时。假设继承下来的实现不适合解决新的问题。则父类必须重写或被其它更适合的类替换。

这样的依赖关系限制了灵活性并终于限制了复用性。

(2)优先使用合成/聚合原则有助于你保持每一个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,而且不太可能增长为不可控制的庞然大物。

盲目使用继承会造成麻烦,本质原因是什么?

继承是一种强耦合的结构。

父类变,子类就必需要变。所以,我们在用继承时。一定要在是“is-a”的关系时再考虑使用,而不是不论什么时候都去使用。

四、C++实现

(1)Bridge.h

#ifndef BRIDGE_H
#define BRIDGE_H #include <iostream>
#include <string> //Implementor:此处为手机软件抽象类
class HandsetSoft
{
public:
virtual void Run()=0;
}; //ConcreteImplementorA,此处为手机游戏
class HandsetGame:public HandsetSoft
{
void Run()
{
std::cout<<"执行手机游戏"<<std::endl;
}
}; //ConcreteImplementorB,此处为手机通讯录
class HandsetAddressList:public HandsetSoft
{
void Run()
{
std::cout<<"执行手机通讯录"<<std::endl;
}
}; //Abstraction,此处为手机品牌抽象类
class HandsetBrand
{
protected:
HandsetSoft* soft;
public:
void SetHandsetSoft(HandsetSoft* soft)
{
this->soft=soft;
}
virtual void Run()=0;
}; //RefineAbstraction,此处为手机品N
class HandsetBrandN:public HandsetBrand
{
public:
void Run()
{
soft->Run();
}
}; //RefineAbstraction。此处为手机品M
class HandsetBrandM:public HandsetBrand
{
public:
void Run()
{
soft->Run();
}
}; #endif

(2)Client.cpp

#include "Bridge.h"
#include <iostream>
#include <cstdlib> //Client,client
void main()
{
//手机品牌N
std::cout<<"手机品牌N:"<<std::endl;
HandsetBrand* ab=new HandsetBrandN(); ab->SetHandsetSoft(new HandsetGame());
ab->Run(); ab->SetHandsetSoft(new HandsetAddressList());
ab->Run(); delete ab; //手机品牌M
std::cout<<std::endl<<"手机品牌M:"<<std::endl;
ab=new HandsetBrandM(); ab->SetHandsetSoft(new HandsetGame());
ab->Run(); ab->SetHandsetSoft(new HandsetAddressList());
ab->Run(); delete ab;
ab=NULL; std::cout<<std::endl;
system("pause");
}

(3)执行截图

大话设计模式C++实现-第22章-桥接模式的更多相关文章

  1. 大话设计模式C++达到-文章16章-国家模式

    一.UML画画 二.概念 状态模式(State):当一个对象的内在状态改变时同意改变其行为.这个对象看起来像是改变了其类. 三.说明 以下是来自书本和网络的对状态模式的定义和分析: (1)状态模式同意 ...

  2. 大话设计模式C++达到-文章12章-外观模式

    一.UML画画 关键词:添加Facade层. 二.概念 外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用. 三.说明 Q:外观模式在什 ...

  3. 大话设计模式C++实现-文章7章-代理模式

    一个.UML画画 二.概念 代理模式:为其它对象提供一种代理以控制对这个对象的訪问. 三.应用场景 (1)远程代理.也就是为一个对象在不同的地址空间提供局部代表.这样能够隐藏一个对象存在于不同地址空间 ...

  4. 大话设计模式C++实现-第19章-组合模式

    一.UML图 关键词:Leaf是叶子,Composite是非叶子节点,Composite包括Leaf. 二.概念 组合模式(Composite):将对象组合成树形结构以表示"部分-总体&qu ...

  5. 设计模式之第22章-组合模式(Java实现)

    设计模式之第22章-组合模式(Java实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...

  6. 设计模式之第10章-桥接模式(Java实现)

    设计模式之第10章-桥接模式(Java实现) “一入软件深似海,从此早睡是路人.黑夜给了我黑色的眼睛,我却用他去寻找八阿哥.”“怎么了,又来那么多的感慨啊.”“还能有什么啊,老板是说让换个APP做,这 ...

  7. 第7章 桥接模式(Bridge Pattern)

    原文 第7章 桥接模式(Bridge Pattern) 定义: 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能 ...

  8. 大话设计模式C++实现-第1章-简单工厂模式

    一.UML图 二.包括的角色 简单工厂模式包括三个角色: (1)工厂类Factory:工厂类是用来制造产品的. 因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类 ...

  9. 大话设计模式C++实现-第15章-抽象工厂模式

    一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...

随机推荐

  1. Linux下安装Vapor

    1.官网下载Vapor软件(二进制安装文件) 注:注意版本,linux下可以在终端输入-uname -l 查看系统版本 2.cd到Vapor软件所在目录 3.解压:1)gunzip vapor-*** ...

  2. DTD 简介

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构.DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 内部的 DOCTYPE 声明 假如 DT ...

  3. Package inputenc Error: Unicode char \u8: not set up for use with LaTeX.

    用TexStudio编辑文档时,不知是多加了空格还是啥,总是提示如下错误: Package inputenc Error: Unicode char \u8: not set up for use w ...

  4. 多线程的Python 教程--“贪吃蛇”

    本指南的里代码可以在这里下载:  threadworms.py ,或者从  GitHub.代码需要  Python 3 或 Python 2 ,同时也需要安装  Pygame . 点击查看大版本图片 ...

  5. the NTP socket is in use, exiting

    centos下使用如下命令手动同步服务器时间 ntpdate ntp.fudan.edu.cn 或 ntpdate ntp.api.bz 出现“the NTP socket is in use, ex ...

  6. 非阻塞式socket的select()用法

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只 是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程 ...

  7. First & First

    First有记录则返回,否则返回null FirstOrDefault有记录则返回,否则NEW一个新的实体对象返回  

  8. 第二百三十五天 how can I 坚持

    其实昨天听遗憾的,尽头看了新闻,有好多人都出去赏雪了,可惜了,最遗憾的是没有叫上你一块去. 晚上喝了点酒,抽了两根烟,以前基本不喝酒,就别提抽烟了,陈小春的<算你狠>,该如何是好. 经常在 ...

  9. UVALive 5886 The Grille (模拟)

    The Grille 题目链接: http://acm.hust.edu.cn/vjudge/problem/26634 Description http://7xjob4.com1.z0.glb.c ...

  10. MFC如何添加系统消息处理函数?

    http://zhidao.baidu.com/question/318026804.html 在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成 ...