Design patterns 哪些设计模式与lambdas配合良好?

Design patterns 哪些设计模式与lambdas配合良好?,design-patterns,lambda,Design Patterns,Lambda,您发现哪些设计模式可以很好地使用lambda表达式/函数?如今,lambda在IoC容器和DI(例如模拟框架)中得到了广泛的应用 我可以在该区域看到以下GoF模式: Moq使用代理模式,积极使用lambdas;例如: var mock = new Mock<IFoo>(); mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 和工厂方法模式,通过证明构造函数调用的参数作为类型注册: builder .Re

您发现哪些设计模式可以很好地使用lambda表达式/函数?

如今,lambda在IoC容器和DI(例如模拟框架)中得到了广泛的应用

我可以在该区域看到以下GoF模式:

Moq使用
代理
模式,积极使用lambdas;例如:

var mock = new Mock<IFoo>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
工厂方法
模式,通过证明构造函数调用的参数作为类型注册:

builder
    .Register(c => new ObjectContainer(ConnectionStrings.CustomerDB))
    .As<IObjectContainer>()
    .Named("CustomerObjectContainer");
builder
.Register(c=>newObjectContainer(ConnectionString.CustomerDB))
.As()
.命名(“CustomerObject容器”);


表达式
类也与
解释器
模式密切相关

在一些情况下,我看到它们被大量使用:

首先,它们非常适合集合上的高级迭代。通常,我们只需要对列表、树或其他对象应用某种转换。使用lambdas可以为收集处理提供易于使用且紧凑的代码。对于一个随机无意义的示例(在C#中使用LINQ):

由于
getWidth
getHeight
定义的闭包包括
width
height
参数,因此这些参数仍然可以从这些方法中使用。但是它们不会在其他任何地方维护,因此一旦
矩形
构造函数退出,就没有其他代码可以访问它们。因此,
width
height
现在是
Rectangle
私有的,只能通过提供的访问器方法访问


除此之外,我要说的是,lambdas对他们来说只是一种很好的理论感觉。支持它们的语言感觉更完整、更少限制和更少混乱。

一元模式完全基于lambda模式,只有在使用lambda模式时才能实现。 C#中单子的解释:

C++中的单子:

Python:

对亲密的选民:为什么这“不是一个真正的问题?”
builder
    .Register(c => new ObjectContainer(ConnectionStrings.CustomerDB))
    .As<IObjectContainer>()
    .Named("CustomerObjectContainer");
var list = new List<int>();
//...
list.Where(x => x < 10).Aggregate( (current, total) => total + current * current );
function Rectangle(width, height) {
    this.getWidth = function() { return width; }
    this.getHeight = function() { return height; }
}