<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      小小及

      橋模式

      使用場景:其作用就是讓抽象與實現相分離,讓兩者都能夠各自變化。

      例子:小時候家里用的是白熾燈,開關是拉線開關,隨著發展,節能燈取代白熾燈,按鈕開關取代了拉線開關。開關和燈泡的關系可以看成是繼承關系,因為開關可以看作是燈泡的一部分,燈泡完全擁有開關,如果真是使用繼承設計,那么將無法應對開關和燈泡的變遷了,看看橋模式是怎么做的。

      #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

      posted on 2018-08-06 11:00  小小及  閱讀(208)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 18禁黄网站禁片免费观看| 麻豆精品一区二正一三区| 亚洲熟妇自偷自拍另欧美| 久久这里只精品热免费99| 久久月本道色综合久久| 大地资源网中文第五页| 9久9久热精品视频在线观看| 92自拍视频爽啪在线观看| 51午夜精品免费视频| 最近中文字幕日韩有码| 午夜福利国产精品视频| 国产精品麻豆中文字幕| 无码 人妻 在线 视频| 亚洲 小说区 图片区 都市| 国产成人精品亚洲一区二区| 老司机aⅴ在线精品导航| 麻豆成人精品国产免费| AV无码不卡一区二区三区| 国产精品普通话国语对白露脸| 亚洲国产精品久久一线不卡| 99久久精品看国产一区| 久青草视频在线观看免费| 亚洲狠狠婷婷综合久久久| 一区二区丝袜美腿视频| 国产国产成人精品久久蜜| 亚洲精品久久7777777国产| 丰满少妇内射一区| 伊人精品成人久久综合97| 亚洲精品久久久久久婷婷| 亚洲中文无码av在线| 久久亚洲精精品中文字幕| 亚洲偷自拍国综合| 无码人妻丰满熟妇区毛片| 国产九九视频一区二区三区| 亚洲欧美自偷自拍视频图片| 高清无码午夜福利视频| 综合在线 亚洲 成人 欧美 | 九九热视频精品在线播放| 强奷乱码中文字幕| 欧美成人www免费全部网站| 亚洲激情国产一区二区三区|