在创建型模式里面,我曾经提到过抽象与实现,抽象不应该依赖于具体实现细节,实现细节应该依赖于抽象。看下面这幅图:

图3 抽象不应该依赖于实现细节
在这种情况下,如果抽象B稳定,而实现细节b变化,这时用创建型模式来解决没有问题。但是如果抽象B也不稳定,也是变化的,该如何解决?这就要用到Bridge模式了。
我们仍然用日志记录工具这个例子来说明Bridge模式。现在我们要开发一个通用的日志记录工具,它支持数据库记录DatabaseLog和文本文件记录FileLog两种方式,同时它既可以运行在.NET平台,也可以运行在Java平台上。
根据我们的设计经验,应该把不同的日志记录方式分别作为单独的对象来对待,并为日志记录类抽象出一个基类Log出来,各种不同的日志记录方式都继承于该基类:

图4 Log类结构图
实现代码如下:
public abstract class Log
![]()
{
![]()
public abstract void Write(string log);
![]()
}
![]()
![]()
public class DatabaseLog : Log
![]()
{
![]()
public override void Write(string log)
![]()
{
![]()
//......Log Database
![]()
}
![]()
}
![]()
![]()
public class TextFileLog : Log
![]()
{
![]()
public override void Write(string log)
![]()
{
![]()
//......Log Text File
![]()
}
![]()
}
![]()