写在之前:设计模式的意义是解决 实际的设计问题,之所以不好理解是因为没有亲身的经历,所以要不停的学习实践思考。
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();最后,为什么要使用桥接模式:由上面的栗子可以看出,桥接模式将类的实现和抽象分离,在进行扩展时,方便分开进行扩展,在高一层级进行耦合,减少了代码的冗余。
时间: 2024-10-11 11:34:34