当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  .NET下的设计模式研究之桥接模式 (3)

 .NET下的设计模式研究之桥接模式 (3)

点击次数:15 次 发布日期:2008-11-26 12:25:10 作者:源代码网
源代码网推荐      现在该是Bridge模式粉墨登场的时候了,我们需要解耦这两个方向的变化,把它们之间的强耦合关系改成弱联系。我们把日志记录方式和不同平台上的实现分别当作两个独立的部分来对待,对于日志记录方式,类结构图仍然是:
源代码网推荐  
源代码网推荐  
源代码网推荐  图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)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华