答案 0 :(得分:40)
.NET框架使用了Gang of Four模式的很多。以下是几个例子:
创作模式
System.Data.Common.DbProviderFactory
。此类的每个成员函数都是工厂方法。 System.Data.IDbConnection.BeginTransaction()
。创建的事务类型取决于底层的IDbConnection实现。WebRequest.Create()
返回一个取决于URL方案的具体类型。结构模式
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在一个非常易于使用的类后面隐藏了一个复杂的任务(包括动态生成程序集!)。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
。 System.Linq.Expressions.ExpressionVisitor
(used 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)
答案 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