现在该是Bridge模式粉墨登场的时候了,我们需要解耦这两个方向的变化,把它们之间的强耦合关系改成弱联系。我们把日志记录方式和不同平台上的实现分别当作两个独立的部分来对待,对于日志记录方式,类结构图仍然是:

图8
现在我们引入另外一个抽象类ImpLog,它是日志记录在不同平台的实现的基类,结构图如下:

图9
实现代码如下:
这时对于日志记录方式和不同的运行平台这两个类都可以独立的变化了,我们要做的工作就是把这两部分之间连接起来。那如何连接呢?在这里,Bridge使用了对象组合的方式,类结构图如下:public abstract class ImpLog
![]()
{
![]()
public abstract void Execute(string msg);
![]()
}
![]()
![]()
public class NImpLog : ImpLog
![]()
{
![]()
public override void Execute(string msg)
![]()
{
![]()
//...... .NET平台
![]()
}
![]()
}
![]()
![]()
public class JImpLog : ImpLog
![]()
{
![]()
public override void Execute(string msg)
![]()
{
![]()
//...... Java平台
![]()
}
![]()
}
![]()

图 10
实现代码如下:
public abstract class Log
![]()
{
![]()
protected ImpLog implementor;
![]()
![]()
![]()
public ImpLog Implementor
![]()
{
![]()
set { implementor = value; }
![]()
}
![]()
![]()
public virtual void Write(string log)
![]()
{
![]()
implementor.Execute(log);
![]()
}
![]()
}
![]()
![]()
public class DatabaseLog : Log
![]()
{
![]()
public override void Write(string log)
![]()
{
![]()
implementor.Execute(log);
![]()
}
![]()
}
![]()
![]()
public class TextFileLog : Log
![]()
{
![]()
public override void Write(string log)
![]()
{
![]()
implementor.Execute(log);
![]()
}
![]()
}