橋接模式(C++實現)

  下午無聊,複習了下橋接模式,作下筆記,之後忘記了能夠翻翻筆記來看看,畢竟好記性不如爛筆頭。ios

  橋接模式:將抽象和它的實現分離,使它們均可以獨立變化。編程

  假如我買了一輛skoda的小轎車,小轎車開了一段時間,如今車上得radio過期了,但願換下radio;再過段時間,上次換得radio又過期了,但願又換更接近潮流的radio。再者,skoda的車開了幾年,想換量普通的大衆的小轎車。上面的車和radio的關係,用咱們面向對象的編程思想該怎麼解決那?通常咱們會想到,使用繼承來實現。如用一個skoda車的類,繼承自不一樣的radio類,在用一個VW車的類也去繼承不一樣的radio,這樣作的確能夠實現,可是一旦換得radio多了,或者車的類型多了,管理取來就變的比較複雜。這時橋接模式就能夠閃亮登場了,將車和radio兩個類獨立出來,使其能夠獨立變化。具體以下面UML類圖:spa

下面是代碼是代碼實現:code

#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; }

輸出結果以下:對象

相關文章
相關標籤/搜索