您的位置:首页 > 其它

设计模式之bridge模式

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

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

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

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

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

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

2.为什么要进行桥接:

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





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

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

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

class person
{
virtaul run () = 0;
}


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

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

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

class RunImplementor
{
virtual void run() = 0;
}

class SlowrunImplementor :public runImplementor
{
virtual void run()
{
// slow run
}
}

class FastrunImplementor :public runImplementor
{
virtual void run()
{
// fast run
}
}

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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: