.NET下的设计模式研究之桥接模式 (3)
点击次数:15 次 发布日期:2008-11-26 12:25:10 作者:源代码网
|
源代码网推荐
源代码网推荐 源代码网推荐 图8 源代码网推荐 源代码网推荐 现在我们引入另外一个抽象类ImpLog,它是日志记录在不同平台的实现的基类,结构图如下: 源代码网推荐 源代码网推荐
源代码网推荐 实现代码如下: 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 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平台 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 这时对于日志记录方式和不同的运行平台这两个类都可以独立的变化了,我们要做的工作就是把这两部分之间连接起来。那如何连接呢?在这里,Bridge使用了对象组合的方式,类结构图如下: 源代码网推荐 源代码网推荐
源代码网推荐 图 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); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 可以看到,通过对象组合的方式,Bridge模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这也是Bridge模式的本意。再来看一下客户端如何去使用: 源代码网推荐 源代码网推荐 class App 源代码网推荐 { 源代码网推荐 public static void Main(string[] args) 源代码网推荐 { 源代码网推荐 //.NET平台下的Database Log 源代码网推荐 Log dblog = new DatabaseLog(); 源代码网推荐 dblog.Implementor = new NImpLog(); 源代码网推荐 dblog.Write(); 源代码网推荐 //Java平台下的Text File Log 源代码网推荐 Log txtlog = new TextFileLog(); 源代码网推荐 txtlog.Implementor = new JImpLog(); 源代码网推荐 txtlog.Write(); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 可能有人会担心说,这样不就又增加了客户程序与具体日志记录方式之间的耦合性了吗?其实这样的担心是没有必要的,因为这种耦合性是由于对象的创建所带来的,完全可以用创建型模式去解决,就不是这里我们所讨论的内容了。 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
