您的位置:首页 > 其它

设计模式之桥接模式

2016-05-16 20:01 399 查看
/article/5940521.html



桥接模式

特点:

多对多的关系(多维元素在变化),仅用继承实现不太合理。Bridge用于将表示和实现解耦,两者可以独立的变化.

角色:

Abstraction::Operation():定义要实现的操作接口。在Abstraction类中维护一个Implement类指针(成员变量),需要采用不同的实现方式的时候只需要传入不同的Implement派生类就可以了。

Implement::OperationImp()

RefinedAbstraction::Operation()

ConcreteImplement::OperationImp()

桥接就是实现Operation()的定义(在Abstraction中)和Operation()的实现(在Implement中)实现解耦和。

class Engine;
class Car{//Abstraction
public:
Car(Engine* en){
m_en=en;
}
virtual void installEngine()=0;
protected:
Engine* m_en;

};
class Engine{//Implement
public:
virtual void InstallEngine()=0;
};
class Engine4400:public Engine{//ConcreteImplement
public:
void InstallEngine(){

cout<<"Install 4400 engine."<<endl;
}
};
class Engine4300:public Engine{
public:
void InstallEngine(){

cout<<"Install 4300 engine."<<endl;
}
};
class BM:public Car{//RefinedAbstraction

public:
BM(Engine* en):Car(en){}//子类的构造函数
void installEngine(){
cout<<"we are BM."<<endl;
m_en->InstallEngine();
}
};
class Jeep:public Car{

public:
Jeep(Engine* en):Car(en){}//子类的构造函数
void installEngine(){
cout<<"we are Jeep."<<endl;
m_en->InstallEngine();
}
};


int main(){
Car* car=NULL;
Engine* p=NULL;
p=new Engine4400;
car=new BM(p);
car->installEngine();
delete car;
delete p;
cout<<"-----------------------------"<<endl;
p=new Engine4300;
car=new Jeep(p);
car->installEngine();
delete p;
delete car;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: