桥接模式:
- 防止子类急剧膨胀(即会发生多层次继承的时候)。
- 定义接口时,如果物体在两个及以上的维度具有强烈的变化倾向,则应该拆分成两个接口。
- 通过在一个接口(ICom)中含有另一个接口(IComImp)的引用实现“桥接”。
- 对应于不同变化维度可以派生出具体的子类而不会相互干扰。
思考:
- Bridge模式与装饰器模式、适配器模式形式上有相似。
- 区别:
1、装饰器模式接口只有一个,通过构建一个Decorator来包装该接口实现横向扩展。
2、适配器有一个老接口,一个新接口,通过适配器模式进行连接转换。
2、桥接模式也有多个接口,通过在一个接口中包含另一个接口的引用实现桥接(与适配器模式有不同)。 - 该模式中变化点是两个维度的,根据单一职责原则,应该进行拆分,然后用多态进行抽象,实现代码稳定。
class ICom { //第一个接口
public:
virtual void a() = 0;
virtual void b() = 0;
void setComImp(IcomImp* comImp){
m_comImp=comImp;
}
private:
IComImp* m_comImp; //通过这个引用和第二个接口实现桥接
};
class IComImp{ //第二个接口(与第一个接口相关性)
public:
virtual void aa() = 0;
virtual void bb() = 0;
};
//则可以分别派生
class IComA :public ICom {
public:
//继承自ICom,则实现拥有了两个接口的所有方法,这样可以不强制实现aa()和bb(),这两个方法通过另外的IcomImp接口实现类对象传递过来
void a(){
//do something
}
void b(){
//do something
}
};
class IComImpA:public IComImp {
public:
//继承自IComImp ,单独实现aa()和bb(),然后传递给ICom的对象,则可以从独立的两个维度合并出一个完整的实体对象
void aa(){
//do something
}
void bb(){
//do something
}
};