• 设计模式--桥梁模式C++实现


    1定义

    将抽象和实现解耦,使得两者可以独立变化

    2类图

    3实现

    #pragma once
    #include<iostream>
    using namespace std;
    
    class Implementor
    {
    protected:
        Implementor(){}
    public:
        virtual ~Implementor() = 0{}
    
        virtual void doSomething() = 0;
        virtual void doAnything() = 0;
    };
    
    class ConcreteImplementor1 :public Implementor
    {
    public:
        void doSomething()
        {
            cout << "1doSomething();" << endl;
        }
        void doAnything()
        {
            cout << "1doAnything();" << endl;
        }
    };
    class ConcreteImplementor2 :public Implementor
    {
    public:
        void doSomething()
        {
            cout << "2doSomething();" << endl;
        }
        void doAnything()
        {
            cout << "2doAnything();" << endl;
        }
    };
    
    class Abstraction
    {
    private:
        Implementor *_imp;
    public:
        Abstraction(Implementor * imp)
            :_imp(imp)
        {}
    
        virtual void request()
        {
            _imp->doSomething();
        }
        Implementor* getImp()
        {
            return _imp;
        }
    };
    
    class RefinedAbstraction :public Abstraction
    {
    public:
        RefinedAbstraction(Implementor* imp)
            :Abstraction(imp)
        {}
    
        void request()
        {
            Abstraction::request();
            Abstraction::getImp()->doAnything();
        }
    };
    
    class Client
    {
    public:
        void operator()()
        {
            Implementor* imp = new ConcreteImplementor1();
            Abstraction* abs = new RefinedAbstraction(imp);
            abs->request();
        }
    };

    4应用

    ①优点

    抽象和实现分离

    完全为了解决集成的缺点而提出的设计模式////抽象与实现的关系本来是纵向的,桥梁模式将他们改为横向关系

    优秀的扩充能力

    实现细节对客户透明

    5使用场景

    不希望或者不适合通过继承的场景

    接口或者抽象类不稳定

    重要性要求较高的场景

    6注意事项

    使用桥梁模式重点在于如何拆分抽象和实现,并不是以设计继承就考虑使他,桥梁的意图是对变化进行封装

  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/lang5230/p/5371409.html
Copyright © 2020-2023  润新知