目的:将抽象与实现相分离。
定义:将抽象部分与它的实现部分分离,使他们都可以独立地变化。
(抽象与实现分离是指让每种实现的变化不会影响到其他实现,从而打到应对变化的目的)
代码如下:
#include <list> #include <iostream> #include <string> using namespace std; /*实现*/ class Implementor{ public: virtual void Operation()=0; }; /*具体实现*/ class ImplementorA:public Implementor{ public: void Operation() { cout<<"windows 版本"<<endl; } }; class ImplementorB:public Implementor{ public: void Operation() { cout<<"linux 版本"<<endl; } }; /*抽象*/ class Abstraction{ protected: /*之所以先构建实现类正是由于抽象必须实现对实现的通信*/ Implementor * Base; public: virtual void Operation()=0; }; /* 被提炼的抽象 作用:当具体实现的时候接收具体实现的基类指针,建立起类间通信 */ class RefinedAbstractionA:public Abstraction{ public: RefinedAbstractionA(Implementor *t) { this->Base=t; } void SetOS(Implementor *t) { this->Base=t; } void Operation() { cout<<"dota:"; Base->Operation(); } }; class RefinedAbstractionB:public Abstraction{ public: RefinedAbstractionB(Implementor *t) { this->Base=t; } void SetOS(Implementor *t) { this->Base=t; } void Operation() { cout<<"LOL:"; Base->Operation(); } }; int main(void) { Implementor *windows = new ImplementorA(); Implementor *linux = new ImplementorB(); RefinedAbstractionA *dota = new RefinedAbstractionA(windows); dota->Operation(); dota->SetOS(linux); dota->Operation(); RefinedAbstractionB *lol = new RefinedAbstractionB(windows); lol->Operation(); lol->SetOS(linux); lol->Operation(); return 0; }
实现系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让他们独立变化,减少它们之间的耦合——大话设计模式
何时使用桥接模式:
在发现我们不得不多角度去分类实现对象,也就是不同操作系统之间的软件存在不同的实现,我们必须解决兼容问题,在这个时候大量的继承会造成大量的类增加,违背了开闭原则。
问:在本次代码中如果我们需要开发新的软件怎么办?
答:只用在Abstrction里添加派生类就可以了,然后在建立类间通信。