哪些是C#本机内置设计模式?

时间:2010-10-28 08:26:24

标签: c# design-patterns

无论框架版本如何,C#都支持哪些内置设计模式? 我正在考虑可以在接口IObservable中找到的Observer模式等模式。 ObservableCollection,INotifyPropertyChanged等。

请在答案中提供模式的命名空间!

8 个答案:

答案 0 :(得分:25)

Action<T>(通常用作访客模式)

Discover the Design Patterns You're Already Using in the .NET Framework MSDN Magazine

示例

public class Root
{
    //Private and not exposed in a IList property = Encapsulation
    private List<Node> _nodes = new List<Node>(); 

    public void Visit(Action<Node> visitor)
    {
        // Controlled enumeration, can for instance handle exceptions in here.
        foreach (var item in _nodes)
        {
            visitor(node);
        }
    }
}

// usage
root.Visit(node => Console.WriteLine(node));

答案 1 :(得分:8)

创作模式

抽象工厂

  • System.Data.Common.DbProviderFactory

生成器

  • System.Text.StringBuilder
  • System.Data.Common.DbConnectionStringBuilder

工厂方法

  • System.Activator
  • System.Net.WebRequest

原型

  • System.ICloneable

的Singleton

  • System.StringComparer.InvariantCulture
  • System.StringComparer.InvariantCultureIgnoreCase

结构模式

适配器

  • 就是System.IO.StreamReader

  • System.Globalization.CultureInfo

组合

  • System.ComponentModel.IComponent

装饰

  • System.IO.Stream

门面

  • 系统环境
  • System.String

飞锤

  • System.StringComparer

代理

  • System.Net.WebClient
  • System.Runtime.Remoting.Proxies.RealProxy
  • System.ServiceModel.ICommunicationObject

行为模式

责任链

  • Microsoft.Practices.EnterpriseLibrary.Logging.Logger

命令

  • System.Windows.RoutedEventArgs

解释

  • System.IFormatProvider
  • System.Text.RegularExpressions.Regex

迭代

  • System.Collections.IEnumerable
  • System.Data.IDataReader

中保

  • System.Threading.Timer

备忘录

  • System.Runtime.Serialization.ISerializable

观察

  • System.EventHandler
  • System.IObservable

国家

  • ...

策略

  • System.Collections.Generic.IComparer

模板方法

  • System.Web.UI.Page

访问者

  • System.Linq.Expressions.ExpressionVisitor

答案 2 :(得分:5)

Iterator是一个(所有集合类和数组都可以使用foreach语句进行迭代)。

另一个是观察者模式 - 这就是事件的本质。在4.0中,添加了IObservable和ObservableCollection。

答案 3 :(得分:4)

StringBuilder使用构建器设计模式。
并且有DbDataAdapter类(适配器模式) Null Object pattern也被广泛使用。

答案 4 :(得分:3)

答案 5 :(得分:3)

观察者模式。我们所有的事件和代表都是通过观察者模式提出的。

工厂模式。工厂中的连接字符串和数据库提供程序。

Iterator模式:我们的foreach语句中的Ienumerable,Ienumerators

适配器:COM通信。运行时可调用包装器(RCW)

模板:在ASP.NET类中的几个地方使用esp,您可以在其中覆盖以提供新的实现

代理:用于我们所有的webservice调用。在c#3.0中,我们也获得了代理集合。

可能会有更多。但这些是我想到的那些

答案 6 :(得分:0)

委托模式(代表和表达式的用途)

答案 7 :(得分:0)

经常使用代理模式。