• 【c++设计模式】桥接模式


    结构型模式

    7)桥接模式

    桥接模式在适配器模式上做了一定的扩展。
    桥接是计算机网络中的用语,本意是指通过网桥把两个局域网连接在一起。
    假如同时有A和B两个抽象类,在A中包含了B的指针,那么就好像把A和B两个类结合在了一起,于是叫做桥接模式。
    例如葡萄,可以有青葡萄,紫葡萄,而酒可以有低度数酒,高度数酒。把两个类结合在一起,就可以组成各种葡萄酒。

    class Grape{
    public:
        Grape():p_color(""),p_area(""){}
        
        void setColor(string color){
            p_color = color;
        }
        void setArea(string area){
            p_area = area;
        }
        virtual void show(){
            cout<<p_color<<" grape from "<<p_area;
        }
    protected:
        string p_color; //颜色
        string p_area; //产地
    };
    
    class PurpleGrape:public Grape{
    public:
        PurpleGrape(string area):Grape(){
            setColor("purple");
            setArea(area);
        }
    };
    
    class GreenGrape: public Grape{
    public:
        GreenGrape(string area):Grape(){
            setColor("Green");
            setArea(area);
        }
    };
    
    class Alcohol{
    public:
        Alcohol(Grape* g):m_grape(g){}
        virtual void show() = 0;
    protected:
        Grape* m_grape;
        
    };
    
    class Wine : public Alcohol{
    public:
        Wine(Grape* p):Alcohol(p){}
        void show(){
            cout<<"wine is made of ";
            m_grape->show();
            cout<<endl;
        }
    };
    
    class Champagne : public Alcohol{
    public:
        Champagne(Grape* p):Alcohol(p){}
        void show(){
            cout<<"Champagne is made of ";
            m_grape->show();
            cout<<endl;
        }
    };
    
    int main(){
        Grape* g1 = new PurpleGrape("Bordeau");
        Grape* g2 = new GreenGrape("Loire");
        
        Alcohol* a1 = new Wine(g1); //将两个类结合在一起
        Alcohol* a2 = new Champagne(g2); //将两个类结合在一起
        
        a1->show();
        a2->show();
    }
    
  • 相关阅读:
    [LeetCode] 55. Jump Game 跳跃游戏
    [LeetCode] 163. Missing Ranges 缺失区间
    [LeetCode] 228. Summary Ranges 总结区间
    获取当时时间和日期
    响应式布局设备分界点
    html5shiv.js分析-读源码之javascript系列
    建站模板开源代码
    js 调试问题
    transform使用参考指南
    浏览器版本过低
  • 原文地址:https://www.cnblogs.com/corineru/p/12013401.html
Copyright © 2020-2023  润新知