大话设计模式C++实现-第22章-桥接模式
一、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章-桥接模式的更多相关文章
- 大话设计模式C++达到-文章16章-国家模式
一.UML画画 二.概念 状态模式(State):当一个对象的内在状态改变时同意改变其行为.这个对象看起来像是改变了其类. 三.说明 以下是来自书本和网络的对状态模式的定义和分析: (1)状态模式同意 ...
- 大话设计模式C++达到-文章12章-外观模式
一.UML画画 关键词:添加Facade层. 二.概念 外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用. 三.说明 Q:外观模式在什 ...
- 大话设计模式C++实现-文章7章-代理模式
一个.UML画画 二.概念 代理模式:为其它对象提供一种代理以控制对这个对象的訪问. 三.应用场景 (1)远程代理.也就是为一个对象在不同的地址空间提供局部代表.这样能够隐藏一个对象存在于不同地址空间 ...
- 大话设计模式C++实现-第19章-组合模式
一.UML图 关键词:Leaf是叶子,Composite是非叶子节点,Composite包括Leaf. 二.概念 组合模式(Composite):将对象组合成树形结构以表示"部分-总体&qu ...
- 设计模式之第22章-组合模式(Java实现)
设计模式之第22章-组合模式(Java实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...
- 设计模式之第10章-桥接模式(Java实现)
设计模式之第10章-桥接模式(Java实现) “一入软件深似海,从此早睡是路人.黑夜给了我黑色的眼睛,我却用他去寻找八阿哥.”“怎么了,又来那么多的感慨啊.”“还能有什么啊,老板是说让换个APP做,这 ...
- 第7章 桥接模式(Bridge Pattern)
原文 第7章 桥接模式(Bridge Pattern) 定义: 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能 ...
- 大话设计模式C++实现-第1章-简单工厂模式
一.UML图 二.包括的角色 简单工厂模式包括三个角色: (1)工厂类Factory:工厂类是用来制造产品的. 因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类 ...
- 大话设计模式C++实现-第15章-抽象工厂模式
一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...
随机推荐
- Oracle Database 11g Express Edition 使用小结(windows)
如何启动oraclewindows系统服务中有一个服务叫:[OracleService[SID]]SID是你安装oracle xe时候的实例名,如果你没有改默认的是[XE], OracleServic ...
- js document对象
document对象可以通过多种方式获取: 最常见的一种情况是,你在文档的script脚本中直接使用document,这个document代表运行着该脚本的文档.(这个document和window. ...
- 数往知来 ASP.NET 模拟服务器:服务端_静态页面_动态页面的响应<十七>
一.客户端是怎么看到我们的网页的呢/ 在浏览器端,如果用汉语请求的是一普通的HTML网页,呢么我们的IIS服务器, 接收到请求以后,那么从IIS服务器所在的电脑区查找该HTML网页, 找到以后将该 ...
- bzoj 3757 苹果树(树上莫队算法)
[题意] 有若干个询问,询问路径u,v上的颜色总数,另外有要求a,b,意为将a颜色看作b颜色. [思路] vfk真是神系列233. Quote: 用S(v, u)代表 v到u的路径上的结点的集合. 用 ...
- 链表回文串判断&&链式A+B
有段时间没有练习了,链表回文串判断用到了栈.链式A+B将没有的项用0补充.链表有没有头节点,及结点和链表的区别,即pNode和pHead. //#include<iostream> //u ...
- BITED-Windows8应用开发学习札记之二:Win8应用常用视图设计
感觉自我表述能力有欠缺,技术也不够硬,所以之后的Windows8应用开发学习札记的文章就偏向于一些我认为较难的地方和重点了多有抱歉. 上节课是入门,这节课就已经开始进行视图设计了. Windows应用 ...
- Python伪开发者对于搜狐云景的测评
Python伪开发者对于搜狐云景的测评 本人是GAE和OpenShift的狂热爱好者,玩过各种国外PaaS.某次想搞个稍微复杂点的Python Web程序,需要比较好的网络传输速度,就试图找前PM(P ...
- Linux中内存查看命令free详解(转)
add by zhj:说了那么多,其实看第一行就足够了,free项就是未使用的内存.其实,我是感觉压根就没必要 使用free命令,用top代替就行了 原文:http://liustb.blog.163 ...
- Styling FX Buttons with CSS
http://fxexperience.com/2011/12/styling-fx-buttons-with-css/ ——————————————————————————————————————— ...
- Prefabs
[Prefabs] A Prefab is a type of asset -- a reusable GameObject stored in Project View. Prefabs can b ...