(结构型模式)Bridge——桥模式

1、合成聚合原则

缘由:对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

原则:

合成/聚合原则(CARP):尽量使用合成/聚合,尽量不要使用类继承

聚合一种弱的’拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分

合成一种强的’拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样

合成聚合的好处:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

2、桥模式意图

桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化

抽象与实现分离:指的是抽象类和它的派生类用来实现自己的对象

3、核心思想

桥模式就是将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化与实现化之间使用组合/聚合关系而不是继承关系,从而让二者独立的变化。

4、优缺点分析

GOOD:将抽象部分与实现部分分离,使它们可以独立变化。

这里说的意思不是让抽象基类与具体类分离,而是现实系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合性,即如果继承不能实现“开放-封闭原则”的话,就应该考虑用桥接模式

5、基本UML图

91[JEILM2DX1D9$19TY_PKH

抽象基类:

1)Abstraction:某个抽象类,它的实现方式由Implementor完成。

2)Implementor:实现类的抽象基类,定义了实现Abstraction的基本操作,而它的派生类实现这些接口。

接口函数:

1)Implementor::OperationImpl:定义了为实现Abstraction需要的基本操作,由Implementor的派生类实现之,而在Abstraction::Operation函数中根据不同的指针多态调用这个函数。

解析:

Bridge用于将表示和实现解耦,两者可以独立的变化,在Abstraction类中维护一个Implementor类指针,需要采用不同的实现方式的时候只需要传入不同的Implementor派生类即可。

6、举例UML图

clip_image002

posted @ 2010-06-24 09:24  红脸书生  阅读(515)  评论(0编辑  收藏  举报