大话设计模式--桥接模式 Bridge -- C++实现实例
1. 桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立的变化。
分离是指 抽象类和它的派生类用来实现自己的对象分离。
实现系统可以有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让他们独立变化,减少他们之间的耦合。
实例:
implementor.h implementor.cpp 实现接口
#ifndef IMPLEMENTOR_H
#define IMPLEMENTOR_H class Implementor
{
public:
Implementor();
void virtual operation()=0;
}; #endif // IMPLEMENTOR_H
#include "implementor.h" Implementor::Implementor()
{
}
concreteimplementora.h concreteimplementora.cpp 具体实现功能A
#ifndef CONCRETEIMPLEMENTORA_H
#define CONCRETEIMPLEMENTORA_H #include "implementor.h" class ConcreteImplementorA : public Implementor
{
public:
ConcreteImplementorA();
void operation();
}; #endif // CONCRETEIMPLEMENTORA_H
#include "concreteimplementora.h"
#include <stdio.h> ConcreteImplementorA::ConcreteImplementorA()
{
} void ConcreteImplementorA::operation()
{
printf("ConcreteImplementorA operation\n");
}
concreteimplementorb concreteimplementorb 具体实现功能B
#ifndef CONCRETEIMPLEMENTORB_H
#define CONCRETEIMPLEMENTORB_H #include "implementor.h" class ConcreteImplementorB : public Implementor
{
public:
ConcreteImplementorB();
void operation();
}; #endif // CONCRETEIMPLEMENTORB_H
#include "concreteimplementorb.h"
#include <stdio.h> ConcreteImplementorB::ConcreteImplementorB()
{
} void ConcreteImplementorB::operation()
{
printf("ConcreteImplementorB operation\n");
}
abstraction.h abstraction.cpp 抽象
#ifndef ABSTRACTION_H
#define ABSTRACTION_H #include "implementor.h" class Abstraction
{
public:
Abstraction();
void setImplementor(Implementor *implementor);
void virtual operation(); protected:
Implementor *implementor;
}; #endif // ABSTRACTION_H
#include "abstraction.h" Abstraction::Abstraction()
{
implementor = 0;
} void Abstraction::setImplementor(Implementor *implementor)
{
this->implementor = implementor;
} void Abstraction::operation()
{
implementor->operation();
}
refinedabstraction.h refinedabstraction.cpp 精确抽象
#ifndef REFINEDABSTRACTION_H
#define REFINEDABSTRACTION_H #include "abstraction.h" class RefinedAbstraction : public Abstraction
{
public:
RefinedAbstraction();
void operation();
}; #endif // REFINEDABSTRACTION_H
#include "refinedabstraction.h" RefinedAbstraction::RefinedAbstraction()
{
} void RefinedAbstraction::operation()
{
implementor->operation();
}
main.cpp
#include <iostream>
#include "refinedabstraction.h"
#include "concreteimplementora.h"
#include "concreteimplementorb.h" using namespace std; int main()
{
cout << "Bridge test!" << endl; Abstraction *ab = new RefinedAbstraction();
ab->setImplementor(new ConcreteImplementorA());
ab->operation(); ab->setImplementor(new ConcreteImplementorB());
ab->operation(); return 0;
}
大话设计模式--桥接模式 Bridge -- C++实现实例的更多相关文章
- linkin大话设计模式--桥接模式
linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- 设计模式 -- 桥接模式(Bridge)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初始桥接模式 ...
- 大话设计模式--工厂模式 factory -- C++实现实例
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...
- 设计模式--桥接模式Bridge(结构型)
一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...
- [工作中的设计模式]桥接模式bridge
一.模式解析: 策略模式一节讲过,通过扩展持有者,使持有者形成抽象类,然后实现多个具体持有者,策略模式可以转化为桥接模式. 桥接模式定义为:将抽象部分与实现部分分离,使它们都可以独立的变化,在软件系统 ...
- C#设计模式——桥接模式(Bridge Pattern)
一.概述在软件开发中,我们有时候会遇上一个对象具有多个变化维度.比如对汽车对象来说,可能存在不同的汽车类型,如公共汽车.轿车等,也可能存在不同的发动机,如汽油发动机.柴油发动机等.对这类对象,可应用桥 ...
- 大话设计模式--访问者模式 Visitor -- C++实现实例
1. 访问者模式: 表示一个作用于某对象结构中的和元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式把数据结构和作用于结构上的操作之间的耦合脱开,使得操作集合可以 ...
- 大话设计模式--解释器模式 interpreter -- C++实现实例
1. 解释器模式: 给定一个语言,定义它的文法的一种表示 并 定义一个解释器,这个解释器使用该表示文法 来解释语言中的句子. 如果一种特定类型的问题发生的频率很高,那么可能就值得将该问题的各个实例表述 ...
随机推荐
- xml初学简单介绍
什么是XML? 1.全称Extensible Markup Language,可扩展标记语言,W3C组织公布. 2.XML用来保存有一定结构关系的数据. 3.标签的嵌套,实质是一串字符串. 4.跨平台 ...
- Carthage:去中心化的Cocoa依赖管理器
Cocoa的依赖管理器,我们已经有了CocoaPods,非常好用,那么为什么还要创建这样一个项目呢?本文翻译自Carthage的Github的README.md,带大家来了解一下这个工具有何不同之处. ...
- object.Equals与object.ReferenceEquals方法
object.Equals方法表达的是语义判等,不一定是引用判等. object.ReferenceEquals方法是肯定是引用判等. 怎么实现一个对象的值语义的 Equals方法?实验. MyCla ...
- 零基础学python-2.7 列表与元组
事实上,能够把列表和元组看成普通的数组.可是这个数组能够存储不同的数据类型(对象) 列表和元组的差别 列表 元组 使用的符号 [] () 元素数量 可变 不可变 改动元素 不能够 能够 假设大家有 ...
- 转载 --iOS QQ第三方登实现
我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆 如图: 下面我们主要讲一下qq的第三方登陆如何实现 首先,到官网注册: http://wiki.connect.qq.com 一,下载S ...
- c# 当前不会命中断点 未载入该文档
C#编码时.有时会遇到标题所说的问题,就是说这个文件和方法明明存在,可总是提示找不到方法.解决方法例如以下: 1.清理全部项目(或相关项目)生成 2.又一次加入全部项目(或相关项目)间的互相引用 3. ...
- Dire Wolf(区间DP)
Dire Wolf Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total ...
- Throwing Dice(概率dp)
C - Throwing Dice Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Lig ...
- ArcGIS API for JavaScript Bookmarks(书签)
说明:本篇博文介绍的是ArcGIS API for JavaScript中的 Bookmarks(书签) ,书签的作用是,把地图放大到一个地方 添加书签,书签名称可以和地图名称一直,单击标签 地图会定 ...
- 6.2.3-Bean的加载处理
在AbstractBeanFactory中doGetBean方法中始终调用了getObjectForBeanInstance方法,这个方法是对参数进行过滤; @SuppressWarnings(&qu ...