意图
将抽象部分与它的实现部分分离,使它们都可以独立的变化
应用场景
类图
参与者
- Abstraction
定义抽象的接口。
维护一个指向Implementor类型对象的指针。 - RedefineAbstraction
扩充由Abstraction定义的接口 - Implementor
定义实现类的接口,该接口可以与Abstraction的接口完全不同。
一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。 - ConcreteImplementor
实现Implementor接口并定义它的具体实现。
代码
#
include
<iostream
>
using namespace std;
class Implementor
{
public :
virtual void OperationImp() = 0;
};
class Abstraction
{
protected :
Implementor *pImp;
public :
virtual void Operation() = 0;
void SetImplementor(Implementor *p)
{
pImp = p;
}
};
class RedifineAbstraction : public Abstraction
{
public :
void Operation()
{
pImp - >OperationImp();
}
};
class ConcreteImplementorA : public Implementor
{
public :
void OperationImp()
{
cout << "具体实现A的方法执行" <<endl;
}
};
class ConcreteImplementorB : public Implementor
{
public :
void OperationImp()
{
cout << "具体实现B的方法执行" <<endl;
}
};
int main()
{
Abstraction *pAb = new RedifineAbstraction();
pAb - >SetImplementor( new ConcreteImplementorA());
pAb - >Operation();
pAb - >SetImplementor( new ConcreteImplementorB());
pAb - >Operation();
}
using namespace std;
class Implementor
{
public :
virtual void OperationImp() = 0;
};
class Abstraction
{
protected :
Implementor *pImp;
public :
virtual void Operation() = 0;
void SetImplementor(Implementor *p)
{
pImp = p;
}
};
class RedifineAbstraction : public Abstraction
{
public :
void Operation()
{
pImp - >OperationImp();
}
};
class ConcreteImplementorA : public Implementor
{
public :
void OperationImp()
{
cout << "具体实现A的方法执行" <<endl;
}
};
class ConcreteImplementorB : public Implementor
{
public :
void OperationImp()
{
cout << "具体实现B的方法执行" <<endl;
}
};
int main()
{
Abstraction *pAb = new RedifineAbstraction();
pAb - >SetImplementor( new ConcreteImplementorA());
pAb - >Operation();
pAb - >SetImplementor( new ConcreteImplementorB());
pAb - >Operation();
}
使用实例
三层架构中就应用了桥接模式,三层架构中的业务逻辑层BLL中通过桥接模式与数据操作层解耦(DAL),其实现方式就是在BLL层中引用了DAL层中一个引用。这样数据操作的实现可以在不改变客户端代码的情况下动态进行更换。