下午无聊,复习了下桥接模式,做下笔记,以后忘记了可以翻翻笔记来看看,毕竟好记性不如烂笔头。
桥接模式:将抽象和它的实现分离,使它们都可以独立变化。
假如我买了一辆 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;
- }
输出结果如下:
来源: http://www.bubuko.com/infodetail-2452396.html