1、概述:
当我们遇到要描述一个类,需要从不同角度来描述的时候,这时候,桥接模式就用到了,比如说,手机这个类,我们可以按品牌来描述,分为三星和苹果等,我们也可以按功能来描述,比如拍照功能、视频播放功能等,如果我们设计的时候,把所有描述都继承自手机类,这样就会出现继承很多层次的现象,这是需要把具体手机的实现和抽象分离开来,就是说,手机分为三星和苹果的,而功能单独抽象出来,因为三星和苹果都具有拍照、视频播放等功能。
2、组合/聚合复用原则:
尽量使用组合/聚合关系,尽量不要使用继承关系。

3、桥接模式定义:
将抽象部分与它的实现分离,使它们都可以独立的变化。
就像刚才说手机这个例子,手机除了苹果和三星的,还有HTC等,手机功能除了拍照和视频播放,还有MP3,上网等功能,我们把手机单独抽象出来,然后,手机功能单纯抽象出来,然后手机再聚合手机功能类,达到相互独立而又有联系的设计。
4、UML类图:

5、示例代码:
我们以手机为例,举例如下:
手机功能抽象类:
abstract class PhoneFunction
{
public abstract void Run();//具体运行哪个功能
}
拍照功能类:
class Photo:PhoneFunction
{
public override void Run()
{
//运行拍照功能
}
}
视频播放类:
class Movie:PhoneFunction
{
public override void Run()
{
//运行视频播放功能
}
}
手机抽象类:
abstract class Phone
{
public PhoneFunction function;
public void SetFunction(PhoneFunction function)
{
this.function=function;
}
public abstract void Run();
}
三星手机类:
class Sunsang:Phone
{
public override void Run()
{
function.Run();
}
}
苹果手机类:
class IPhone:Phone
{
public override void Run()
{
function.Run();
}
}
客户端调用:
Phone sunsang=new Sunsang();
sunsang.SetFunction(new Movie());
sunsang.Run();
浙公网安备 33010602011771号