如何解决可以替代面向对象的设计模式的功能或动态技术的示例
|| 这与功能编程是否可以代替GoF设计模式有关? 自从C#中引入了lambda和动态特性以来,是否存在使用lambda或其他语言功能以任何其他方式认为已过时或已解决的标准设计模式? 例如,C#的动态功能现在可以用于执行多种方法。 http://achoiusa.wordpress.com/2009/08/27/exploring-c-4-0-multimethods/ (我认为Marc Gravell对此有一些帖子?) 我个人现在倾向于使用T的Func做工厂。 例如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中已经使Observer模式“已过时”。但是,这并不是真的正确,因为该模式并未过时-框架仅提供该模式的默认实现,这意味着您几乎不必自己实现它。
同样,您可以说委托只是匿名接口,因此ѭ1是抽象工厂。
模式不会消失,仅仅是因为一种语言为其提供了惯用的支持。
,作为.net或C#的一部分提供的某些模式的示例,程序员没有明确实现。我提供有关.net的一般答案,而不是特定于C#的答案
迭代器模式:通过使用List <>或Collection <>开发人员,默认情况下获得IEnumerable的实现。因此,不需要显式实现。但话虽如此,还是有人(在本例中是.net框架)为开发人员实现了模式。
OOAD设计模式不会过时,但是开发人员不需要知道使用这种模式的实现。
Object.Clone()是另一个示例-原型制作。开发人员只需根据需求实现浅拷贝或深拷贝。但是.net框架可以保证支持原型模式。
装饰器-使用XAML,可以用其他职责装饰UI控件。文本框可以用边框颜色,宽度等修饰。
事件的隧穿和冒泡是链或责任模式的一个示例
事件是.net中的头等公民,无需从头开始实施。这是Observer模式的示例,程序员可以使用它而无需从头开始实现。
,您具有此答案中所述的Visitor模式:
继承和服务类
,当然,显而易见的策略策略就是策略模式,也可以通过高阶函数来完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。