桥接模式,从字面意思上说就是用一条桥梁来链接两个不同的事物。专业一点讲,就是当一个类存在独立变化的两个维度的时候,可以将这两个维度分离出,设计成独立的继承结构,使他们可以独立扩展。桥接模式用一种巧妙的方式(用抽象关联代替传统的多重继承)解决了多重继承存在的问题。
假如说现在要开发一个图像浏览系统,要求可以显示JPG,PNG,GIF等格式的图像,同时系统要跨平台,要求能在Windows,Unix,Linux等操作系统下面展示,不同的操作系统可以把不同的图片转换成像素矩阵,然后在系统中显示,这个时候我们可以理解成浏览系统(类)里面有两个独立变换的维度,一个是图像格式,一个操作系统,他们都可以独立扩展。这个时候为了保证系统的扩展性和灵活性,就可以采用桥接模式来连接这两个独立变化的维度。如果把这两个维度写在一起,用传统的继承方式解决的话,系统的扩展性会很差。
接下来看看系统的类图吧
我们给不同格式的图片抽象了一个父类,给不同的操作系统抽象了一个父类,客户端针对Image编程,一般情况下Image类是抽象类。然后看一下具体的代码吧
显示Image类和它的子类的代码
abstract class Image//客户端针对它编程
{
protected ImageImp imp;
public void SetImage(ImageImp imp)
{
this.imp =