美文网首页我爱编程
结构型模式3-桥接模式

结构型模式3-桥接模式

作者: sunblog | 来源:发表于2018-04-16 23:04 被阅读0次

    结构型模式3-桥接模式

    桥接模式bridge

    意图

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

    问题思考

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

    适用性

    • 不希望抽象在和它的实现部分之间有一个固定的绑定关系。比如希望可以在运行时更换实现。
    • 类的抽象和它的实现都可以通过子类的方式扩充(两个不同的变化方向)。Bridge模式使得可以对不同的抽象以及它的实现部分进行组合,并分别对它们进行扩充。

    类图

    ![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)。

    相关文章

      网友评论

        本文标题:结构型模式3-桥接模式

        本文链接:https://www.haomeiwen.com/subject/abuykftx.html