大运天成赖搏击

进步最重要

导航

设计模式学习-每日一记(8.桥接模式)

桥接模式

A.定义:

将抽象部分和它的实现部分分离,使他们可以独立的变化.

B.定义分析:

"将抽象部分和它的实现部分分离,使他们可以独立的变化."抽象部分,比如我们写一个gui tookit,里边有个Window类,这个类代表了窗口,提供了窗口的功能接口如:close、open、resize、moveto等等.基类的接口,我们可以理解为抽象部分.

"将抽象部分和它的实现部分分离,使他们可以独立的变化."实现部分,上边说抽象部分是Window类,实现Window的功能:

我们有方法法a:直接在Window类的定义中,绘制Window的轮廓、外形、标题栏、滚动条等等,但是这有个前提,我们是基于什么平台绘制的,当然可以是Windows、Gtk、Qt或者MiniGUI.如果我们直接在Window类中写上了具体的功能实现,那么抽象部分即是实现部分,而且这样的实现是有固定依赖平台的.

另一种方法b:我们不直接在Window类中实现功能了,我们针对不同平台继承出不同的子类,比如 WindowsWindow是针对Windows平台的Window实现,GtkWindow是针对Gtk平台的Window实现.这样的WindowsWindow和GtkWindow也是 实现部分.他们实现了抽象部分的功能接口定义.但是,我们看到实现子类中的功能接口是被Window定义好的,如果子类需要增加接口,那么Window要动,如果Window动,子类也要动.也就是抽象部分和实现部分耦合的,也就是没有分离.

"将抽象部分和它的实现部分分离,使他们可以独立的变化."方法b中,抽象部分和实现部分,因为继承关系造成了耦合,那有没有办法解耦呢?看方法c:

实现部分,即我们的WindowsWindow和GtkWindow不再从Window类继承,而是Window来聚合WindowsWindow或者GtkWindow来实现Window功能。这样抽象和实现部分不就分离了吗?不就能独立变化了吗?

C.问题:

 (1)为什么叫桥接模式?

抽象部分和实现部分,不再是继承关系,而是抽象部分聚合了实现部分,这样的关系我们称为桥接.

(2)什么时候使用?

当需要分离抽象部分和实现部分的时候.

当抽象部分和实现部分都可以通过生成子类扩充的时候.

...

posted on 2011-10-28 09:03  linucos  阅读(185)  评论(0编辑  收藏  举报