桥模式

使用场景:其作用就是让抽象与实现相分离,让两者都能够各自变化。

例子:小时候家里用的是白炽灯,开关是拉线开关,随着发展,节能灯取代白炽灯,按钮开关取代了拉线开关。开关和灯泡的关系可以看成是继承关系,因为开关可以看作是灯泡的一部分,灯泡完全拥有开关,如果真是使用继承设计,那么将无法应对开关和灯泡的变迁了,看看桥模式是怎么做的。

#include <iostream>

using namespace std;

//实现化角色
//电灯
class Light
{
public:
    virtual void poweroOn() = 0;
    virtual void powerOff() = 0;
};

//具体实现化角色
//白炽灯
class FilamentLight :public Light
{
public:
    virtual void poweroOn()
    {
        cout << "白炽灯打开!" << endl;
    }
    virtual void powerOff()
    {
        cout << "白炽灯关闭!" << endl;
    }
};

//节能灯
class EfficientLight :public Light
{
public:
    virtual void poweroOn()
    {
        cout << "节能灯打开!" << endl;
    }
    virtual void powerOff() 
    {
        cout << "节能灯关闭!" << endl;
    }
};

//抽象角色定义
//开关
class Switch
{
public:
    Switch(Light *light) :m_pLight(light){}
    virtual void on() = 0;
    virtual void off() = 0;
    void setLight(Light *light){ m_pLight = light; }
protected:
    Light *m_pLight;
};


//修正抽象化角色
//拉线开关
class PullChainSwitch :public Switch
{
public:
    PullChainSwitch(Light *light) :Switch(light){}
    virtual void on()
    {
        cout << "拉线开关打开:";
        m_pLight->poweroOn();
    }
    virtual void off()
    {
        cout << "拉线开关关闭:";
        m_pLight->powerOff();
    }
};

//按钮开关
class ButtonSwitch :public Switch
{
public:
    ButtonSwitch(Light *light) :Switch(light){}
    virtual void on()
    {
        cout << "按钮开关打开:";
        m_pLight->poweroOn();
    }
    virtual void off()
    {
        cout << "按钮开关关闭:";
        m_pLight->powerOff();
    }
};



//使用方法
int main()
{ 
    //创建具体实现化角色
    Light *filamentLight = new FilamentLight;//白炽灯
    Light *efficientLight = new EfficientLight;//节能灯

    //创建具体抽象化角色
    Switch * pullChainSwitch = new PullChainSwitch(filamentLight);//白炽灯一般配拉线开关
    pullChainSwitch->on();

    //生活好了换了节能灯
    pullChainSwitch->setLight(efficientLight);
    pullChainSwitch->on();

    //生活好了又换了按钮开关了
    Switch * buttonSwitch = new ButtonSwitch(efficientLight);
    buttonSwitch->on();


    return 0;
}

  输出结果:

拉线开关打开:白炽灯打开!
拉线开关打开:节能灯打开!
按钮开关打开:节能灯打开!
请按任意键继续. . .

  桥梁模式是针对继承的不足提出了,一般当继承大于等于二层时,才考虑使用桥梁模式。此时才能显示出抽象变化的方便。

参考:https://blog.csdn.net/a369189453/article/details/81176196

猜你喜欢

转载自www.cnblogs.com/xiaoxiaoji/p/9429122.html