Examples of functional or dynamic techniques that can substitute for object oriented Design Patterns
这与函数式编程是否取代了GOF设计模式有些关系?
由于C中引入了lambda和dynamics,是否有任何标准设计模式可以被认为是过时的,或者可以使用lambda或其他语言特性以其他方式解决?
例如,C的动态特性现在可以用于执行多种方法。http://achoiusa.wordpress.com/2009/08/27/exploring-c-4-0-multimethods/(我想马克·格雷维尔有关于这个的帖子吗?)
就我个人而言,我现在倾向于使用T的功能来做工厂。
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static class SomeFactory { public static Func<IUnitOfWork> GetUoW = () => new EF4UoW(new SomeModelContainer()); } // usage var uow = SomeFactory.GetUoW(); // testabillity var testUoW = new InMemUoW(); testUoW.Add(new Customer()...); SomeFactory.GetUoW = () => testUoW; // the service can get an UoW using the factory var result = SomeDomainService.DoStuff(...); |
有人有其他的例子吗?
[编辑]当然,模式本身不会过时,但有些模式是特定于范式的,因此,由于C现在是多范式,C的一些功能属性可能会降低某些OOP模式的吸引力。
设计模式不会因为单一语言的发展而过时。模式通常是语言不可知论。
在某种意义上,您可以说.NET已经使.NET 1.0中的观察者模式"过时"。但是,这并不真正正确,因为模式没有变得过时——框架只是提供了模式的默认实现,这意味着您很少需要自己实现它。
从同样的意义上说,委托只是匿名接口,所以
模式不会因为语言为它们提供了惯用的支持而消失。
作为.NET或C的一部分提供的一些模式的示例,这些模式不是由程序员显式实现的。我提供了有关.NET的一般回答,而不是特定于C#
OOAD设计模式不会过时,但是开发人员不需要知道使用这种模式的实现。
object.clone()是另一个示例-原型设计。开发人员只需要根据需求实现浅拷贝或深拷贝。但是.NET框架保证支持原型模式。
decorator-使用XAML,您可以用额外的职责来修饰UI控件。文本框可以用边框颜色、宽度等进行装饰。
事件的隧道和冒泡是链或责任模式的一个例子。
事件是.NET中的头等公民,无需从头开始实施。这是一个观察者模式的例子,程序员不需要从头实现就可以使用它。
当然,最明显的是策略模式,也可以用高阶函数来实现。
您可以使用本答案中描述的访客模式:
继承和服务类