.NET Framework中是否使用了任何设计模式?

时间:2009-08-22 19:01:30

标签: .net design-patterns

我想知道:GoF中是否使用了.NET Framework个设计模式?

BOUNTY:

我在答案中看到了下面的MSDN链接。是否有任何帖子/视频,或者你可以列出模式,最重要的是它在哪里使用?

7 个答案:

答案 0 :(得分:40)

.NET框架使用了Gang of Four模式的很多。以下是几个例子:

创作模式

  • 抽象工厂System.Data.Common.DbProviderFactory。此类的每个成员函数都是工厂方法。
  • 构建器:WCF渠道构建基础架构。
  • 工厂方法
    • System.Data.IDbConnection.BeginTransaction()。创建的事务类型取决于底层的IDbConnection实现。
    • WebRequest.Create()返回一个取决于URL方案的具体类型。
  • 原型 - 用于克隆和序列化的框架
  • Singleton - 用作WCF中的激活方法,即WCF基础结构可以将Web服务视为单例。同上.NET Remoting。

结构模式

  • 适配器:ADO.NET提供程序,例如System.Data.SqlClient.SqlConnectionSystem.Data.OleDb.OleDbConnection等。每个提供程序都是其特定数据库的适配器。
  • 复合:很多例子
    • System.Windows.Forms.Control及其派生类。
    • System.Web.UI.Control及其派生类。
    • System.Xml.XmlNode及其派生类。
  • 装饰
    • System.Windows.Controls.Decorator(在WPF中)。
    • Stream的某些实现是内部流周围的装饰器(例如GZipStreamCryptoStream)。
  • Facade System.Xml.Serialization.XmlSerializer。 XmlSerializer在一个非常易于使用的类后面隐藏了一个复杂的任务(包括动态生成程序集!)。
  • 代理:由svcutil.exe生成并派生自System.ServiceModel.ClientBase<TChannel>
  • 的Web服务代理

行为模式

  • 责任链System.Web.UI.Control.OnBubbleEvent()System.Web.UI.Control.RaiseBubbleEvent()
  • 命令System.Windows.Input.ICommand(在WPF中)。
  • 口译员System.Linq.Expressions.Expression及相关课程。
  • 迭代器:很多例子
    • System.Collections.IEnumerable
    • System.Collections.Generic.IEnumerable<T>
    • System.Data.IDataReader
  • Memento :.NET Serializable 模式是 Memento 模式的变体。
  • 观察者 - .NET事件机制。
  • 策略 - ArrayList中的排序方法
  • 模板方法 - 自定义控件的渲染方法
  • 访问者System.Linq.Expressions.ExpressionVisitorused internally by [LINQ]

答案 1 :(得分:22)

这是一篇讨论这个主题的文章:

http://msdn.microsoft.com/en-us/magazine/cc188707.aspx

现在可以使用ASP.NET MVC添加MVC模式。 :)

编辑:自编辑/请求更多信息:

这篇文章列出了几种模式以及它们在框架中的使用位置。 http://www.jot.fm/issues/issue_2006_11/article1.pdf

.NET中的提供程序是所有提供程序模型模式。 http://msdn.microsoft.com/en-us/library/aa479030.aspx

.NET中的提供者模式也使用策略模式。

工厂模式在几个地方使用,这是一个在ASP.NET中使用的示例。 http://msdn.microsoft.com/en-us/library/ms954600.aspx

以下是.NET中DP的网络直播: http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&EventID=1032293567&CountryCode=US

我没有看过它,所以我不确定它们在框架中的使用方式有多少......

正如评论中已经提到的,GoF模式可能在.NET框架中全部使用。哪个不是最容易回答的,因为框架是庞大的,除非MS在某些示例中列出,因为它并不总是显而易见的。对模式越熟悉越有可能会注意到使用它的框架类。

希望我添加的额外链接可以帮助您。

此外,http://www.dofactory.com/Framework/Framework.aspx有一个待售套件(79-99美元),用于教授如何在.NET中使用/实现GoF模式但是他们会在阅读中列出,他们也会解释MS在哪些地方使用它们框架。

答案 2 :(得分:6)

阅读“框架设计指南:可重用.NET库的约定,惯用法和模式”。本书将向您展示.NET所基于的真实设计模式。

答案 3 :(得分:4)

当然。例如, Factory pattern 用于ADO.NET数据提供程序类。 Singleton模式用于.NET远程处理。 Dispose模式用于资源管理。

答案 4 :(得分:0)

BCL中的BeginXXX和EndXXX方法基于 Asynchronous Completion Token 模式。

答案 5 :(得分:0)

  • System.Net.WebClient是FaçadeFattern的一个示例。
  • System.IO.Stream:经典异步模式
  • System.ComponentModel.BackgroundWorker:基于事件的异步模式
  • 如前所述:Dispose模式几乎在框架中的任何地方使用
  • System.Control:模板方法模式

答案 6 :(得分:0)

是的。.Net框架BCL中使用了许多设计模式。实际上,这是从实际角度了解设计模式用法的最佳场所。

模式:实施

观察者模式:实现为事件和代理

装饰器模式:在System.IO Stream类中实现

迭代器模式:IEnumerable和迭代器

策略模式:通过Lambda扩展查询(list.Where(表达式))在Linq中实现

工厂模式:在System.Net.WebRequest中

适配器模式:TLB导入/ RCW(运行时可调用包装器)

请观看此视频以获取有关此主题的详细演示。

https://www.youtube.com/watch?v=riHGGYHVoaQ&list=PL2_Cl8E2bG36PGuBGesHFPVM1s6M02JmN