zoukankan      html  css  js  c++  java
  • 桥接模式(C++实现)

      下午无聊,复习了下桥接模式,做下笔记,以后忘记了可以翻翻笔记来看看,毕竟好记性不如烂笔头。

      桥接模式:将抽象和它的实现分离,使它们都可以独立变化。

      假如我买了一辆skoda的小轿车,小轿车开了一段时间,现在车上得radio过时了,希望换下radio;再过段时间,上次换得radio又过时了,希望又换更接近潮流的radio。再者,skoda的车开了几年,想换量普通的大众的小轿车。上面的车和radio的关系,用我们面向对象的编程思想该怎么解决那?一般我们会想到,使用继承来实现。如用一个skoda车的类,继承自不同的radio类,在用一个VW车的类也去继承不同的radio,这样做的确可以实现,但是一旦换得radio多了,或者车的类型多了,管理取来就变的比较复杂。这时桥接模式就可以闪亮登场了,将车和radio两个类独立出来,使其可以独立变化。具体如下面UML类图:

    下面是代码是代码实现:

    #include <iostream>
    using namespace std;
    
    class Radio //表现层
    {
    public:
        virtual void install()
        {
            cout<<"Radio::install()"<<endl;
        }
    };
    
    class PqRadio : public Radio
    {
    public:
        virtual void install()
        {
            cout<<"PqRadio::install()"<<endl;
        }
    };
    
    class MqbRadio : public Radio
    {
    public:
        virtual void install()
        {
            cout<<"MqbRadio::install()"<<endl;
        }
    };
    
    class RowRadio : public Radio
    {
    public:
        virtual void install()
        {
            cout<<"RowRadio::install()"<<endl;
        }
    };
    
    class Car //实现层
    {
    public:
        virtual void  configRadio(Radio* radio)
        {
            cout<<"Car::installRadio()"<<endl;
            radio->install();
        }
    };
    
    class VwCar : public Car
    {
    public:
        virtual void configRadio(Radio* radio)
        {
            cout<<"VwCar::configRadio()"<<endl;
            radio->install();
        }
    };
    
    
    class SkodaCar : public Car
    {
    public:
        virtual void configRadio(Radio* radio)
        {
            cout<<"SkodaCar::configRadio()"<<endl;
            radio->install();
        }
    };
    
    int main(int argc, char** argv)
    {
        Radio* radioPq = new PqRadio();
        Radio* radioMqb = new MqbRadio();
        Radio* radioRow = new RowRadio();
    
        Car* car = new SkodaCar();
        car->configRadio(radioPq);
        car->configRadio(radioRow);
        car->configRadio(radioMqb);
    
    
        delete radioPq;
        delete radioMqb;
        delete radioRow;
        delete car;
        return 0;
    }

    输出结果如下:

      

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/huiz/p/8215333.html
Copyright © 2011-2022 走看看