bridge模式
来源:互联网 发布:新疆网络管制 编辑:程序博客网 时间:2024/06/04 00:44
Bridge
一.意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化.
二.适用性
1. 你不希望在抽象和它的实现部分有一个固定的绑定关系.
2. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充,这是bridge模式使你可以对不同的抽象接口和实现部分进行组合并分别对它们进行扩充.
3. 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
4. 你想对客户完全隐藏抽象的实现部分,在c++中,类的表示在类接口中是可见的
5. 有许多类要生成,这样一种类层次结构说明你必须将一个对象分解成两个部分
6. 你想在多个对象间共享实现,但同时要求客户并不知道这一点
三.优点
通过对象组合的方式,bridge模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这也是bridge模式的本意.将一件事物本征的东西抽象成不同的类,通过不同的类的组合描述一件事物.
四.代码
#include<iostream>
usingnamespacestd;
//bridgemode
//颜色基类
classCColor
{
public:
virtualvoiddrawColor(){}
};
classCYelloowColor:publicCColor
{
public:
virtualvoiddrawColor()
{
cout<<"yellowcolor!"<<endl;
}
};
classCBlackColor:publicCColor
{
public:
virtualvoiddrawColor()
{
cout<<"blackcolor!"<<endl;
}
};
classCWhiteColor:publicCColor
{
public:
virtualvoiddrawColor()
{
cout<<"whitecolor!"<<endl;
}
};
//自车类,包括颜色类
classCVehicle
{
protected:
CColor*m_pVehicleColor;
public:
virtualvoiddrawVehicle(){}
voidSetVehicleColor(CColor*color)
{
m_pVehicleColor=color;
}
};
classCBus:publicCVehicle
{
public:
virtualvoiddrawVehicle()
{
cout<<"bus--";
if(m_pVehicleColor!=NULL)
{
m_pVehicleColor->drawColor();
}
else
{
cout<<"donotsetcolor!"<<endl;
}
}
};
classCCar:publicCVehicle
{
public:
virtualvoiddrawVehicle()
{
cout<<"car--";
if(m_pVehicleColor!=NULL)
{
m_pVehicleColor->drawColor();
}
else
{
cout<<"donotsetcolor!"<<endl;
}
}
};
classCBike:publicCVehicle
{
public:
virtualvoiddrawVehicle()
{
cout<<"bike--";
if(m_pVehicleColor!=NULL)
{
m_pVehicleColor->drawColor();
}
else
{
cout<<"donotsetcolor!"<<endl;
}
}
};
intmain()
{
cout<<"HelloWorld!"<<endl;
CVehicle*car=newCCar();
car->SetVehicleColor(newCWhiteColor());
car->drawVehicle();
return0;
}
- Bridge模式
- Bridge模式
- Bridge模式
- bridge模式
- Bridge模式
- Bridge模式
- Bridge 模式
- Bridge 模式
- Bridge 模式
- Bridge模式
- bridge模式
- Bridge模式
- bridge模式
- bridge模式
- Bridge模式
- Bridge模式
- Bridge 模式
- Bridge模式
- 统计学习方法----k近邻法的实现:kd树
- Eclipse Java Build Path详解
- iOS AFNetworking3.0以上版本 基本使用
- javaScript模式(基本技巧)一
- iOS App上架流程(2016最新版)
- bridge模式
- java进阶之路
- 1006
- React Native之DrawerLayoutAndroid仿网易云音乐滑动菜单
- yii框架项目的创建
- build.gradle配置参数详解
- 比你厉害的人,其实比你拼命多了
- raid
- 给JZ2440开发板重新分区