桥接模式

目的:将抽象与实现相分离。
定义:将抽象部分与它的实现部分分离,使他们都可以独立地变化。
(抽象与实现分离是指让每种实现的变化不会影响到其他实现,从而打到应对变化的目的)
代码如下:


#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里添加派生类就可以了,然后在建立类间通信。

posted @ 2015-05-03 11:56  机智的程序员小熊  阅读(109)  评论(0编辑  收藏  举报