码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之bridge模式

时间:2015-08-01 00:57:59      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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

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();
最后,为什么要使用桥接模式:
由上面的栗子可以看出,桥接模式将类的实现和抽象分离,在进行扩展时,方便分开进行扩展,在高一层级进行耦合,减少了代码的冗余。

   

 

设计模式之bridge模式

标签:

原文地址:http://www.cnblogs.com/missmzt/p/4681505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!