桥接模式(Bridge Pattern)
定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。
举例:
拿汽车在路上行驶的来说。既有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,它们所行驶的环境(路)也有不同类型,在软件系统中就要适应两个方面(不同车型,不同道路)的变化,怎样实现才能应对这种变化呢?
再次举一个例子,汽车和发动机,发动机有很多种4400cc,4500cc等等,汽车也有很多种bmw5,bmw6等等,不同的汽车可以安装不同的发动机。
概述:
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。
意图:
将抽象部分与实现部分分离,使它们都可以独立的变化。——《设计模式》GOF
桥接模式的类结构图:
兑现代码:
#include <iostream>
#include <string>
using namespace std;
class Engine
{
public:
virtual void showEngine()=0;
};
class Engine4400cc:public Engine
{
public:
void showEngine()
{
cout<<"我是4400cc发动机"<<endl;
}
};
class Engine4500cc:public Engine
{
public:
void showEngine()
{
cout<<"我是4500cc发动机"<<endl;
}
};
class Car
{
public:
Car(Engine*engine)
{
this->m_engine=engine;
}
virtual void InstallEngine()=0;
protected:
Engine*m_engine;
};
class BMW5:public Car
{
public:
BMW5(Engine*engine):Car(engine)
{
}
virtual void InstallEngine()
{
cout<<"BMW5"<<endl;
m_engine->showEngine();
}
};
class BMW6:public Car
{
public:
BMW6(Engine*engine):Car(engine)
{
}
virtual void InstallEngine()
{
cout<<"BMW6"<<endl;
m_engine->showEngine();
}
};
void main()
{
Engine *engine =NULL;
//engine = new Engine4400cc();
engine =new Engine4500cc();
BMW5 *bmw5 = new BMW5(engine);
bmw5->InstallEngine();
delete bmw5;
delete engine;
cout<<"nihao..."<<endl;
system("pause");
return ;
}