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

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

点击次数:27 次 发布日期:2008-11-26 12:25:12 作者:源代码网
源代码网推荐      另外考虑到不同平台的日志记录,对于操作数据库、写入文本文件所调用的方式可能是不一样的,为此对于不同的日志记录方式,我们需要提供各种不同平台上的实现,对上面的类做进一步的设计得到了下面的结构图:
源代码网推荐  
源代码网推荐  图5
源代码网推荐  
源代码网推荐    实现代码如下:
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  public class NDatabaseLog : DatabaseLog
源代码网推荐  {
源代码网推荐   public override void Write(string log)
源代码网推荐   {
源代码网推荐    //......(.NET平台)Log Database
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐  public class JDatabaseLog : DatabaseLog
源代码网推荐  {
源代码网推荐   public override void Write(string log)
源代码网推荐   {
源代码网推荐    //......(Java平台)Log Database
源代码网推荐   }
源代码网推荐  }
源代码网推荐  public class NTextFileLog : TextFileLog
源代码网推荐  {
源代码网推荐   public override void Write(string log)
源代码网推荐   {
源代码网推荐    //......(.NET平台)Log Text File
源代码网推荐   }
源代码网推荐  }
源代码网推荐  public class JTextFileLog : TextFileLog
源代码网推荐  {
源代码网推荐   public override void Write(string log)
源代码网推荐   {
源代码网推荐    //......(Java平台)Log TextFile
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐    现在的这种设计方案本身是没有任何错误的,假如现在我们要引入一种新的xml文件的记录方式,则上面的类结构图会变成:  
源代码网推荐  
源代码网推荐  
源代码网推荐  图6
源代码网推荐  
源代码网推荐    如图中蓝色的部分所示,我们新增加了一个继承于Log基类的子类,而没有修改其它的子类,这样也符合了开放-封闭原则。如果我们引入一种新的平台,比如说我们现在开发的日志记录工具还需要支持Borland平台,此时该类结构又变成了:
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   同样我们没有修改任何的东西,只是增加了两个继承于DatabaseLog和TextFileLog的子类,这也符合了开放-封闭原则。
源代码网推荐  
源代码网推荐  但是我们说这样的设计是脆弱的,仔细分析就可以发现,它还是存在很多问题,首先它在遵循开放-封闭原则的同时,违背了类的单一职责原则,即一个类只有一个引起它变化的原因,而这里引起Log类变化的原因却有两个,即日志记录方式的变化和日志记录平台的变化;其次是重复代码会很多,不同的日志记录方式在不同的平台上也会有一部分的代码是相同的;再次是类的结构过于复杂,继承关系太多,难于维护,最后最致命的一点是扩展性太差。上面我们分析的变化只是沿着某一个方向,如果变化沿着日志记录方式和不同的运行平台两个方向变化,我们会看到这个类的结构会迅速的变庞大。
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


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