Which design patterns are build-in supported by C# regardless framework version? I'm thinking of patterns such as Observer pattern that can be found in interface IObservable. ObservableCollection, INotifyPropertyChanged etc.
Please pro开发者_JAVA技巧vide with the namespace of the pattern in your answers!
Action<T>
(normally used as visitor pattern)
Discover the Design Patterns You're Already Using in the .NET Framework (MSDN Magazine
)
Example
public class Root
{
//Private and not exposed in a IList property = Encapsulation
private List<Node> _nodes = new List<Node>();
public void Accept(Action<Node> visitor)
{
// Controlled enumeration, can for instance handle exceptions in here.
foreach (var item in _nodes)
{
visitor(node);
}
}
}
// usage
root.Accept(node => Console.WriteLine(node));
Creational Patterns
Abstract Factory
- System.Data.Common.DbProviderFactory
Builder
- System.Text.StringBuilder
- System.Data.Common.DbConnectionStringBuilder
Factory Method
- System.Activator
- System.Net.WebRequest
Prototype
- System.ICloneable
Singleton
- System.StringComparer.InvariantCulture
- System.StringComparer.InvariantCultureIgnoreCase
Structural Patterns
Adapter
- System.IO.StreamReader
Bridge
- System.Globalization.CultureInfo
Composite
- System.ComponentModel.IComponent
Decorator
- System.IO.Stream
Facade
- System.Environment
- System.String
Flyweight
- System.StringComparer
Proxy
- System.Net.WebClient
- System.Runtime.Remoting.Proxies.RealProxy
- System.ServiceModel.ICommunicationObject
Behavioral Patterns
Chain Of Responsibility
- Microsoft.Practices.EnterpriseLibrary.Logging.Logger
Command
- System.Windows.RoutedEventArgs
Interpreter
- System.IFormatProvider
- System.Text.RegularExpressions.Regex
Iterator
- System.Collections.IEnumerable
- System.Data.IDataReader
Mediator
- System.Threading.Timer
Memento
- System.Runtime.Serialization.ISerializable
Observer
- System.EventHandler
- System.IObservable
State
- ??
Strategy
- System.Collections.Generic.IComparer
Template Method
- System.Web.UI.Page
Visitor
- System.Linq.Expressions.ExpressionVisitor
Iterator is one (all collection classes and arrays can use the foreach
statement for iteration).
Another is the observer pattern - pretty much this is what events are. In 4.0 the IObservable and ObservableCollection were added.
StringBuilder uses the builder design pattern..
And there is the DbDataAdapter class (adapter pattern).
The Null Object pattern is broadly used as well.
Observer pattern. All our events and delegates are raised through the observer pattern.
Factory pattern. Connection strings and db providers from factory.
Iterator Pattern: Ienumerable, Ienumerators in our foreach statements
Adapter: COM communication. Runtime Callable Wrappers(RCW)
Template: Used in several places esp in ASP.NET classes where you can override to provide new implementation
Proxy: For all our webservice calls. in c# 3.0 we got proxy collections as well.
There could be many more. But these are the ones that came to my mind
Abstract Factory: System.Data.Common.DbProviderFactory
The delegation pattern (that's what the delegates and expresssions are for)
The proxy pattern is used often.
精彩评论