Bridge是设计模式中比较复杂和难理解的模式之一,也是OO开发和设计中经常会用到的模式之一。使用组合的方式将抽象和实现彻底的解耦,这样的好处是抽象和实现可以独立地变化,系统的耦合性也得到了很好的降低。
GOF在说明Bridge模式时,指出"将抽象部分与它的实现部分分离,使得他们可以独立变化",这句话很简单,但是也很复杂。原因就在于GOF的那句话中"实现"该怎么去理解:"实现"特别是和"抽象"放在一起的时候我们默认的理解是"实现"就是"抽象"的具体子类的实现,但是这里GOF所谓的"实现"的含义不是指抽象基类的具体子类对抽象基类中虚函数(接口)的实现,是和继承结合在一起的。
而这里的"实现"的含义指的是怎么去实现用户的需求,并且指的是通过组合的方式实现的,因此这里的实现不是指的继承基类,实现基类接口,而是指通过对象组合实现用户的需求,理解了这一点,也就理解了Bridge模式。
实际上使用Brigde模式和使用带来的问题方式的解决方案的根本区别在于通过继承还是通过组合的方式去实现一个功能需求,因此面向对象分析和设计中有一个原则就是 Favor Comosition Over Inheritance.
Brideg模式典型结构图
--------------------------------------Abstraction.h----------------------------------------------------
#ifndef _ABSTRACTION_H_
#define _ABSTRACTION_H_
class AbstractionImp;
class Abstraction
{
public:
virtual ~Abstraction();
virtual void Operation() = 0;
protected:
Abstraction();
};
class RefinedAbstraction:public:Abstraction
{
public:
RefinedAbstraction(AbstractionImp *imp);
~RefinedAbstraction();
void Operation();
private:
AbstractionImp *m_imp;
};
#endif
-------------------------------------Abstraction.cpp--------------------------------
#include "Abstraction.h"
#include "AbstractionImp.h"
#include<iostream>
using namespace std;
Abstraction::Abstraction()
{}
Abstraction::~Abstraction()
{}
RefinedAbstraction::RefinedAbstraction(AbstractionImp *imp)
{
m_imp = imp;
}
RefinedAbstraction::~RefinedAbstraction()
{}
void RefinedAbstraction::Operation()
{
imp->Operation();
}
--------------------------------------AbstractionIMp.h-----------------------------------
#ifndef _ABSTRACTIONIMP_H_
#define _ABSTRACTION_H_
class AbstractionImp
{
public:
virtual ~AbstractionImp();
virtual void Operaction() = 0;
protected:
AbstractionImp();
};
class ConcreateAbstractionImpA:public AbstractionImp
{
public:
ConcreateAbstractionImpA();
~ConcreateAbstractionImpA();
virtual void Operation();
};
class ConcreateAbstractionImpB:public AbstractionImp
{
public:
ConcreateAbstractionImpB();
~ ConcreateAbstractionImpB();
virtual void Operation();
};
----------------------------------------------AbstractionImp.cpp-------------------------------
#include "AbstractionImp.h"
#include <iostream>
using namespact std;
AbstractionImp::AbstractionImp()
{}
AbstractionImp::~AbstractionImp()
{}
void AbstractionImp::Operation()
{
cout <<"AbstractionImp....imp..."<<endl;
}
ConcreateAbstractionImpA::ConcreateAbstractionImpA()
{}
ConcreateAbstractionImpB::~ConcreateAbstractionImpA()
{}
void ConcreateAbstractionImpA::Operation()
{
cout<<"ConcreateAbstractionImpA..."<<endl;
}
ConcreateAbstractionImpB::ConcreateAbstractionImpB()
{}
ConcreateAbstractionImpB::~ConcreateAbstractionImpB()
{}
void ConcreateAbstractionImpB::Operation()
{
cout<<"ConcreateAbstractionImpB..."<<endl;
}
-----------------------------------------main.cpp---------------------------------------
#include"Abstraction.h"
#include"AbstractionImp.h"
#include<iostream>
using namespact std;
int main(int argc,char * argv[])
{
AbstractionImp * imp = new ConcreateAbstractionImpA();
Abstraction *abs = new RefinedAbstraction(imp);
abs->Operation();
return 0;
}
分享到:
相关推荐
桥接模式(Bridge Pattern)是设计模式中的一种结构型模式,它主要解决的是在软件设计中,当抽象和实现之间存在紧密耦合时,如何使这两者能够独立地变化。这种模式通过引入一个抽象层来分离接口和实现,使得它们可以...
桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使得两者可以独立地变化。这种模式常用于需要在多个维度上变化的场景,比如不同的形状和颜色,允许在不改变客户端代码的情况下增加新...
桥接模式是软件设计模式中的一种结构型模式,它的主要目的是为了实现抽象和实现的解耦,使得两者可以独立地进行扩展。在桥接模式中,抽象类(Abstraction)不直接引用具体实现(Implementation),而是通过一个桥接...
桥接模式(Bridge Pattern)是面向对象设计中的一种结构型模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。在C#编程中,桥接模式的应用能够帮助我们更好地解耦系统,提高代码的灵活性和可扩展性。 ...
桥接模式(Bridge Pattern)是设计模式中的一种结构型模式,它的主要目的是将抽象部分与实现部分解耦,使得它们可以独立地进行变化。在桥接模式中,抽象类与其具体的实现类通过一个抽象的“桥”进行连接,使得抽象...
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在软件工程中,这种分离有助于降低复杂性,提高代码的可维护性和可扩展性。桥接模式的核心...
桥接模式是设计模式中的一种结构型模式,它旨在将抽象部分与实现部分解耦,使得它们可以独立地变化。这种模式将抽象类和它的实现类进行分离,通过一个抽象接口来连接它们,使得两者可以独立发展,增加了系统的灵活性...
桥接模式(Bridge Pattern)是一种结构型设计模式,它旨在将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C#编程中,这种模式尤其有用,因为随着软件系统的复杂性增加,类的继承层次可能会变得难以管理...
桥接模式(Bridge Pattern)是一种用于将抽象部分与其实现部分分离的设计模式,这样两者就可以独立变化。该模式属于对象结构型模式,有时也被称为柄体(Handle and Body)模式或接口(Interface)模式。 **英文定义...
桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C++编程中,桥接模式能够帮助我们设计出更灵活、可扩展的系统,允许我们在不修改原有代码的基础上更换或增加新的实现...
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使得它们可以独立地进行变化和发展。在C++编程中,这种模式的应用可以帮助我们构建灵活、可扩展的系统,尤其在面对...
桥接模式是一种结构型设计模式,它的目的是将抽象化与实现化解耦,使得它们可以独立变化。这种模式主要用于处理当一个类存在两个或多个独立的变化的维度时的情况,例如,当一个类的抽象部分和实现部分可能发生变化,...
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在实际开发中,这种模式可以有效地减少类的复杂性和耦合度,提高代码的可扩展性。下面将...
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在绘图软件中,可以使用工厂模式来创建各种图形对象。例如,我们可以定义一个图形工厂,根据输入参数决定创建哪种类型的图形,如圆形、矩形等,这样...
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地进行变化。在Java中,桥接模式通常用来解耦抽象接口和其实现,使得两者可以独立演化。例如,假设我们有一个图形类库,其中包含不同形状...
桥接设计模式是一种结构型设计模式,它将抽象部分与其实现部分相分离,使得它们可以独立进行变化。在实际的软件开发中,这种模式能够帮助我们构建灵活、可扩展的系统,允许我们在不修改原有代码的情况下增加新的功能...
桥接设计模式是一种结构型设计模式,它将抽象部分与其实现部分相分离,使得它们可以独立地进行变化。在C++中,这种模式尤其有用,因为它允许我们编写可扩展的代码,使得在不修改原有代码的基础上,可以方便地添加新...
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使得它们可以独立地进行变化。这种模式在软件工程中被广泛应用于当一个类想有多重实现方式,或者当一个类的实现可能...
桥接模式是一种设计模式,属于结构型模式,其主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。这种模式通过引入一个抽象化角色来实现抽象和实现的解耦,允许它们独立地扩展。在桥接模式中,抽象...