我爱编程

结构型模式3-桥接模式

2018-04-16  本文已影响0人  sunblog

结构型模式3-桥接模式

桥接模式bridge

意图

将抽象部分与它的实现部分分离,使它们都可以独立的变化。

问题思考

参考《设计模式》。假设GUI框架支持Windows和macOS。分别有两个子类实现抽象Window:Win32Window, DarwinWindow。现在我们需要抽象一个IconWindow,专门用于Window的图标处理。为了使IconWindow支持Windows和macOS,我们需要两个子类,Win32IconWindow, DarwinIconWindow。那么问题来了,如果我们需要支持Linux平台呢。我们还需要为IconWindow添加一个LinuxIconWindow。这样很繁琐。如果你有更好的办法,说不定恰恰是桥接模式。

适用性

类图

![bridge]

实现

class Abstraction {
public:
    virtual void Operation() { impl->OperationImp(); };

private:
    Implementor *impl = nullptr;   // should be mImpl
};


class Implementor {
public:
    virtual void OperationImp() = 0;
};

class RefinedAbstraction : public Abstraction {
public:
    // call twice. or whater
    virtual void OperationTwice() {
        Operation();
        Operation();
    }
};

class ConcreteImplementorA : public Implementor {
public:
    void OperationImp() override {
        // some code
    }
};

注意:bridge模式和adapter模式的区别。bridge模式的目的是分离抽象和实现,没有改变原来的接口。而adapter的目的是使不兼容的接口兼容,改变了原来的接口(adaptee)。

上一篇下一篇

猜你喜欢

热点阅读