无论框架版本如何,C#都支持哪些内置设计模式? 我正在考虑可以在接口IObservable中找到的Observer模式等模式。 ObservableCollection,INotifyPropertyChanged等。
请在答案中提供模式的命名空间!
答案 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)
创作模式
抽象工厂
生成器
工厂方法
原型
的Singleton
结构模式
适配器
桥
组合
装饰
门面
飞锤
代理
行为模式
责任链
命令
解释
迭代
中保
备忘录
观察
国家
策略
模板方法
访问者
答案 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)
经常使用代理模式。