现在的位置: 首页 > 综合 > 正文

伤脑筋的bridge模式-我不明白。。

2013年09月09日 ⁄ 综合 ⁄ 共 1296字 ⁄ 字号 评论关闭

看了看 看了看。。看不明白。

还是那图,还是那人。

伤脑筋。

不过看到了几句话:

oo的原则 之一就是 相比使用继承 使用 对象组合更好 。

另外:

GoF 在说明Bridge 模式时,在意图中指出Bridge 模式“将抽象部分与它的实现部分分
离,使得它们可以独立地变化”。而这里的“实现”的含义指的是怎么去实现
用户的需求,并且指的是通过组合(委托)的方式实现的,因此这里的实现不是指的继承基
类、实现基类接口,而是指的是通过对象组合实现用户的需求。理解了这一点也就理解了
Bridge 模式,理解了Bridge 模式,你的设计就会更加Elegant 了。

拿这里的抽象是对应 用户需求地抽象吗?

桥是什么东西呢.

桥下是河,桥地两旁是小山丘,住着人。这些人可以通过这座桥往来。这里的人不是通常得人。 桥的一旁可以发生改变,但是另外一旁却可以不变。

桥是一种联系,关系。关系很抽象。你可以说人和诸由联系,人和石头有联系,。。。没有关系的 你可以为他们建立关系。

在程序设计中 通常的能访问是说 一方包含另一方。

说说桥的表面形式吧。

两个抽象类A1,A2,其中A1能访问 A2(A1有一个成员是指向A2的指针 ,之所以使用指针是因为运行时邦定)。A1,A2均可以派生出很多子类。

你只要在A1的构造函数中传入一个A2类系的指针,这样你的 A1类系的 对象就可以访问相应的A2类系的成员了。

说了这么多还时那样。

通过组合改变类对象的行为。当一个类对象包含其他类对象时,可以通过改变它所包含的类对象来改变它的行为。

不过别忘了 为了看起来好看 ,有让他们有共同的或者相似的接口(成员方法)。

                                                                      I(/fn/)

                                                   //                                       //

                                   A1(//A2*pq2//)------------桥---------------------->A2

                       ||                ||                                                          ||                        ||              //

                     A11              A12                                                   A21                 A22           A23

//

A1 *pa1= new A11( new A21 );

pa1->fn();

pa1= new A12( new A21);

pa1->fn();

pa1= new   A11(new A22);

pa1->fn();

//注意桥这种模式是 针对 用户需求的(具体什么意思我也不晓得)

抱歉!评论已关闭.