五、桥接模式

桥接模式:

  • 防止子类急剧膨胀(即会发生多层次继承的时候)。
  • 定义接口时,如果物体在两个及以上的维度具有强烈的变化倾向,则应该拆分成两个接口。
  • 通过在一个接口(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
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值