Bridge 模式

Bridge
模式将抽象和行为划分开来,各自独立,但能动态的结合。在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。


 1 ///////////////Abstraction.h/////////////
2 #pragma once
3 class AbstractionImp ;
4 class Abstraction
5 {
6 public:
7 virtual ~Abstraction();
8 virtual void Operation() = 0 ;
9 protected:
10 Abstraction();
11 private:
12 };
13
14 class RefinedAbstraction : public Abstraction
15 {
16 public:
17 ~RefinedAbstraction();
18 RefinedAbstraction();
19 RefinedAbstraction(AbstractionImp* imp);
20 void Operation();
21 protected:
22 private:
23 AbstractionImp* _imp ;
24 };


///////////////Abstraction.cpp/////////////
#include "Abstraction.h"
#include "AbstractionImp.h"
Abstraction::~Abstraction()
{

}
Abstraction::Abstraction()
{

}
void Abstraction::Operation()
{

}

RefinedAbstraction::~RefinedAbstraction()
{

}
RefinedAbstraction::RefinedAbstraction()
{

}
RefinedAbstraction::RefinedAbstraction(AbstractionImp* imp)
{
_imp = imp ;
}
void RefinedAbstraction::Operation()
{
_imp->Operation();
}


 1 ///////////////AbstractionImp.h/////////////
2 #pragma once
3 class AbstractionImp
4 {
5 public:
6 virtual ~AbstractionImp();
7 virtual void Operation() = 0;
8
9 protected:
10 AbstractionImp();
11 private:
12 };
13
14 class ConcreteAbstractionImpA : public AbstractionImp
15 {
16 public:
17 ~ConcreteAbstractionImpA();
18 ConcreteAbstractionImpA();
19 void Operation();
20 protected:
21 private:
22 };
23
24 class ConcreteAbstractionImpB : public AbstractionImp
25 {
26 public:
27 ~ConcreteAbstractionImpB();
28 ConcreteAbstractionImpB();
29 void Operation();
30 protected:
31 private:
32 };


 1 ///////////////AbstractionImp.cpp/////////////
2 #include "AbstractionImp.h"
3 #include <iostream>
4 using namespace std;
5 AbstractionImp::~AbstractionImp()
6 {
7
8 }
9 AbstractionImp::AbstractionImp()
10 {
11
12 }
13 void AbstractionImp::Operation()
14 {
15
16 }
17 ConcreteAbstractionImpA::~ConcreteAbstractionImpA()
18 {
19
20 }
21 ConcreteAbstractionImpA::ConcreteAbstractionImpA()
22 {
23
24 }
25 void ConcreteAbstractionImpA::Operation()
26 {
27 cout<<"ConcreteAbstractionImpA...."<<endl;
28 }
29
30
31 ConcreteAbstractionImpB::~ConcreteAbstractionImpB()
32 {
33
34 }
35 ConcreteAbstractionImpB::ConcreteAbstractionImpB()
36 {
37
38 }
39 void ConcreteAbstractionImpB::Operation()
40 {
41 cout<<"ConcreteAbstractionImpB...."<<endl;
42 }


 1 ///////////////main.cpp/////////////
2 #include "Abstraction.h"
3 #include "AbstractionImp.h"
4 #include <iostream>
5 using namespace std ;
6 int main()
7 {
8 AbstractionImp* impA = new ConcreteAbstractionImpA();
9 Abstraction* abs = new RefinedAbstraction(impA);
10 abs->Operation();
11 system("pause");
12 return 0;
13 }

Bridge 模式,码迷,mamicode.com

时间: 2024-09-27 01:18:02

Bridge 模式的相关文章

Bridge模式

Bridge模式 Bridge模式 在面向对象的开发过程中,要做到2点:1.高内聚(cohesion),2.松耦合(coupling).但是在实际开发过程中难以把握,例如会遇到这样的问题: 1)客户给了一个需求,之后我们用一个类A来实现. 2)客户的需求有了变化,要用到2个算法来实现.于是我们通过定义一个抽象基类A,在用两个具体类A1和A2实现这两个算法. 3)客户需求又有了变化,要求在2个操作系统上实现.我们再抽象一个层次,不同操作系统抽象为A0和A1,每个操作系统上有2个算法,在实现为A00

设计模式之桥接模式(Bridge模式)

我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根据想象描绘出格式图样.而毛笔下的国画更是工笔写意,各展风采.而今天我们的故事从蜡笔与毛笔说起. 设想要绘制一幅图画,蓝天.白云.绿树.小鸟,如果画面尺寸很大,那么用蜡笔绘制就会遇到点麻烦.毕竟细细的蜡笔要涂出一片蓝天,是有些麻烦.如果有可能,最好有套大号蜡笔,粗粗的蜡笔很快能涂抹完成.至于色彩吗,最好每种颜色来支粗的,除了蓝天还有绿地呢.这样,如果一套12种颜色的蜡笔,我们需要两套24支,同种颜色的一粗一细.呵呵,画还没画,开始做梦了

敏捷软件开发 – ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式

设计运行在简易台灯中的软件.台灯由一个开关和一盏灯组成.可以询问开关是开着还是关着,也可以让灯打开或者关闭. 下面设计了一个简易的模型.Switch对象可以轮询实际开关的状态,并且可以发送相应的turnOn和turnOff消息给Light. 这个设计违反了两个设计原则:依赖倒置(DIP)和开放-封闭(OCP).对DIP的违反是明显的,Switch依赖了具体类Light.DIP告诉我们要优先依赖于抽象类.对OCP的违反虽然没有那么明显,但是更加切中要害.我们之所以不喜欢这个设计是因为它迫使我们在任

VM虚拟机网络在Bridge模式下,本机不能连接SSH问题的解决

今天遇到了一个很奇怪的问题. VM虚拟机网络连接原先在NAT模式下,本机通过SSH访问没有任何问题,但切换到Bridge模式后,SSH死活都连接不上.以为是自己SSH设置或iptables的问题,但怎么调都不对.偶然在另一台机器通过SSH访问,却顺利连接上了.于是放“狗”狂搜,终于找到了问题解决的方法,只需要把本机网卡属性->配置->高级中,将"Offload Checksum"属性设成"Disable",一切就正常了.

桥(Bridge)模式

Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用桥模式 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以下两种: 这多个具体实现之间恰好是并列的,如前面举例,打桩,有两个concrete class:方形桩和圆形桩:这两个形状上的桩是并列的,没有概念上的重复,那么我们只要使用继承就可以了.实际应用上,常常有可能在这多个concrete class之间有概念上重叠.那么需要我们把抽象共同部分和行为共同部

Java桥模式(Bridge模式)

Bridge定义:将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用桥模式 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以下两种: 这多个具体实现之间恰好是并列的,如前面举例,打桩,有两个concrete class:方形桩和圆形桩:这两个形状上的桩是并列的,没有概念上的重复,那么我们只要使用继承就可以了. 实际应用上,常常有可能在这多个concrete class之间有概念上重叠.那么需要我们把抽象共同部分和行为共同

设计模式(java)--Bridge模式

转自:吕震宇 http://www.cnblogs.com/zhenyulu/articles/67016.html#!comments 我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根据想象描绘出格式图样.而毛笔下的国画更是工笔写意,各展风采.而今天我们的故事从蜡笔与毛笔说起. 设想要绘制一幅图画,蓝天.白云.绿树.小鸟,如果画面尺寸很大,那么用蜡笔绘制就会遇到点麻烦.毕竟细细的蜡笔要涂出一片蓝天,是有些麻烦.如果有可能,最好有套大号蜡笔,粗粗的蜡笔很快能涂抹完成.至于色彩吗,最

C++设计模式实现--桥接(Bridge)模式

一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上. 这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux. 其实,上面几家公司开发的软件和硬件在很多地方都有相似之处,如果每家公司都做自己的系统,这意味着资源和人员的极大浪费. 这时,无论出现新的系统

Structual设计--Bridge模式

1.意图 将抽象部分与它的实现部分分离,使他们都可以独立地变化. 2.别名 Handle/Body 3.动机 当一个抽象对象可能有多个实现时,通常用继承来协调它们.抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现.但是此方法有时不够灵活.继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立的进行修改.扩充和重用. 4.适用性 以下情况使用Bridge模式: 你不希望在抽象和它的实现部分之间有一个固定的绑定关系.例如这种情况可能是因为,在程序运行时刻实现部分应可以