(转自http://eneasy.iteye.com/blog/174892)
十一. 桥接模式
整理自 《java与模式》阎宏编著
1.意图:
将抽象化与实现化脱耦,使得两者可以独立地变化。
2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10083/75d2ee0d-2829-363e-b267-a64827f5bd06.jpg[/img]
3.原理:
强关联:编译时期已经确定,无法在运行时期动态更改的关联。
弱关联:可以动态确定并在运行时期动态更改的关联。
继承关系是强关联,聚合关系是弱关联。
桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用合成/聚集关系而不是继承关系,即将强关联变成弱关联,从而使得两者可以相对独立地变化。
4.特征:
抽象化(Abstraction)角色:抽象化给出定义,并保存一个对实现化对象的引用。
修正抽象化(refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:给出实现化角色的接口,但不给出具体的实现。
具体实现化(Concrete Implementor)角色:给出实现化角色的具体实现。
抽象化角色可以通过向不同的实现化对象委派,来达到动态转换自己的功能的目的。可以动态地增加修正抽象化角色和具体实现化角色,而不用修改现有的代码,符合“开-闭”原则。
十一. 桥接模式
整理自 《java与模式》阎宏编著
1.意图:
将抽象化与实现化脱耦,使得两者可以独立地变化。
2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10083/75d2ee0d-2829-363e-b267-a64827f5bd06.jpg[/img]
3.原理:
强关联:编译时期已经确定,无法在运行时期动态更改的关联。
弱关联:可以动态确定并在运行时期动态更改的关联。
继承关系是强关联,聚合关系是弱关联。
桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用合成/聚集关系而不是继承关系,即将强关联变成弱关联,从而使得两者可以相对独立地变化。
4.特征:
抽象化(Abstraction)角色:抽象化给出定义,并保存一个对实现化对象的引用。
修正抽象化(refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:给出实现化角色的接口,但不给出具体的实现。
具体实现化(Concrete Implementor)角色:给出实现化角色的具体实现。
抽象化角色可以通过向不同的实现化对象委派,来达到动态转换自己的功能的目的。可以动态地增加修正抽象化角色和具体实现化角色,而不用修改现有的代码,符合“开-闭”原则。