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

San*_*box 26 .net design-patterns

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

BOUNTY:

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

Pau*_*nde 40

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

创作模式

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

结构模式

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

行为模式

  • 责任链: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模式的变体.
  • Observer - .NET事件机制.
  • 策略 - ArrayList中的排序方法
  • 模板方法 - 自定义控件的渲染方法
  • 访问者 :System.Linq.Expressions.ExpressionVisitor(由内部使用[LINQ] )


Kev*_*che 23

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

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

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

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

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

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

.NET中的提供程序模式也使用策略模式.

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

这是关于DP在.NET中的网络广播: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在框架中使用它们的位置.

  • 我讨厌这样的名单.绝大多数GoF设计模式不适合.NET程序员.有更好的模式可以解决相同的目标,但使用.NET平台提供的功能.不幸的是,他们没有花哨的名字,所以他们往往在文学中被忽略. (4认同)
  • 只是给他他要求的东西.:) (2认同)

Jon*_*len 6

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