(结构型模式)Bridge——桥模式
1、合成聚合原则
缘由:对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。
原则:
合成/聚合原则(CARP):尽量使用合成/聚合,尽量不要使用类继承
聚合:一种弱的’拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分
合成:一种强的’拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
合成聚合的好处:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
2、桥模式意图
桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化
抽象与实现分离:指的是抽象类和它的派生类用来实现自己的对象
3、核心思想
桥模式就是将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化与实现化之间使用组合/聚合关系而不是继承关系,从而让二者独立的变化。
4、优缺点分析
GOOD:将抽象部分与实现部分分离,使它们可以独立变化。
这里说的意思不是让抽象基类与具体类分离,而是现实系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合性,即如果继承不能实现“开放-封闭原则”的话,就应该考虑用桥接模式
5、基本UML图
抽象基类:
1)Abstraction:某个抽象类,它的实现方式由Implementor完成。
2)Implementor:实现类的抽象基类,定义了实现Abstraction的基本操作,而它的派生类实现这些接口。
接口函数:
1)Implementor::OperationImpl:定义了为实现Abstraction需要的基本操作,由Implementor的派生类实现之,而在Abstraction::Operation函数中根据不同的指针多态调用这个函数。
解析:
Bridge用于将表示和实现解耦,两者可以独立的变化,在Abstraction类中维护一个Implementor类指针,需要采用不同的实现方式的时候只需要传入不同的Implementor派生类即可。
6、举例UML图