设计模式之bridge模式

写在之前:设计模式的意义是解决 实际的设计问题,之所以不好理解是因为没有亲身的经历,所以要不停的学习实践思考。

bridge翻译为桥接。 既然为桥接 则一定有桥接的两个对象。本文打算从三个方面来分析桥接模式。

1.桥接的两个对象是什么? 2.怎么样进行桥接 3.为什么要使用桥接模式。

1.桥接的两个对象是什么?

首先看桥接模式的定义:将一个类的抽象部分与实现部分分离,使它们都可以独立的变化。从这句话中科一粗略的知道桥接的对象

:一个类的抽象部分和实现部分。

2.为什么要进行桥接:

首先看一下设计模式书中给出的桥接模式的uml图。

Client同过调用Abstraction中的Operation方法,实现Client想要的功能。其中,具体的Operation实现由Implementor(其子类负责具体实现)来实现,Operation通过组合的方式来完成对Implementor的调用(一般通过工厂模式获得Implementor的实例,优先使用组合而不是继承~~)

在实际的程序设计中,当一个类有多维的变化,我理解的多维的变化是指 抽象类中的方法有多种实现,在子类中不同的实现又构成了不同的子类。举个简单的栗子~

人这个抽象类,里面有一个虚方法,virtual run () = 0;

1 class person 
2 {
3     virtaul run () = 0;           
4 }

我们有男人,女人继承了persion类。并重写该run方法,但是有的人跑的快,有的人跑的慢,还有的人不会跑(特殊情况,比如婴儿~),这时候我们要

有跑的快的女人,跑得快的男人,跑得慢的男人,跑得慢的女人时,就需要四个子类(分别继承男人和女人)。这时候如果来了一个中性人,程序员砸了键盘,拿起鼠标开始复制粘贴T_T。

这时候,桥接模式就显现出威力了。定义一个类叫runImplementor 具体实现如下:

 1 class RunImplementor
 2 {
 3      virtual void run() = 0;
 4 }
 5 
 6 
 7 class SlowrunImplementor :public runImplementor
 8 {
 9      virtual void run()
10         {
11           // slow run 
12         }
13 }    
14 
15 
16 class FastrunImplementor :public runImplementor
17 {
18      virtual void run()
19         {
20           // fast run 
21         }
22 } 

这时,想要一个跑的快的女人时,person *womanFast = new person("fast"); womanFast->getrunImplementor().run();
最后,为什么要使用桥接模式:
由上面的栗子可以看出,桥接模式将类的实现和抽象分离,在进行扩展时,方便分开进行扩展,在高一层级进行耦合,减少了代码的冗余。

补充: 看了大话设计模式,又对比设计模式一书后,个人理解的桥接模式使用的场景为, 当一个系统有多维的变化空间时,如上面举得例子,人分为男人,女人,中性人,
人有跑的方法,跑的有快又慢有不跑的, 所以通过桥接模式,将人的抽象与跑的实现分离开来,在人与跑之前架起一座桥。来减少彼此之间的耦合。
~~~~~
原文地址:https://www.cnblogs.com/missmzt/p/4681505.html