您發現哪些設計模式可以很好地與lambda表達式/函數配合使用?什麼樣的設計模式適用於lambda?
回答
lambda表達式正在積極在IoC容器和DI(例如模擬框架)目前使用
我可以看到以下在這方面的GOF模式:
Moq的使用Proxy
圖案與活性使用lambda表達式;例如:
var mock = new Mock<IFoo>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
您可以找到lambda表達式有助於實現IoC容器Singleton
模式,例如autofac,不限制自己的可測性,像往常一樣單身的作用:
builder.Register(c => new MyClass()).SingleInstance();
而且通過Factory Method
模式通過參數類型註冊驗證構造函數調用的方法:
builder
.Register(c => new ObjectContainer(ConnectionStrings.CustomerDB))
.As<IObjectContainer>()
.Named("CustomerObjectContainer");
也
Expression <TDelegate>
類也密切相關,Interpreter
模式
+1。我認爲代表團也是一種設計模式。 –
還有的地方我看到他們使用的公平位幾種情況:
原因之一,他們是偉大的高層次遍歷所有藏品。通常,我們只需要對列表或樹或其他東西應用某種變形。使用lambdas可以爲收集處理提供易於使用和簡潔的代碼。對於(使用LINQ在C#)隨機無意義例如:
var list = new List<int>();
//...
list.Where(x => x < 10).Aggregate((current, total) => total + current * current);
沒有lambda表達式,這種代碼將是可怕和不必要地大。
它們在使用圍繞回調的API時也很方便,因爲有很多次我們只需要使用一次回調。它不得不編寫一次性使用的完整函數,因爲這只是使命名空間混亂的額外代碼。
最後的設計模式來自JavaScript。我不確定這是否適用於一般的lambda表達式,因爲我不知道閉包是lambda表達式的必需組件。但是由於許多語言允許lambda關閉變量,所以我會提及它。
正如您可能或不知道的那樣,JavaScript通過基於原型的繼承可以實現面向對象的設計。但是一個缺點是它沒有數據抽象的概念。然而,後來發現lambda可以用來提供數據抽象。通過使用匿名函數的封閉件(這確實是lambda表達式),我們可以實現此目的:
function Rectangle(width, height) {
this.getWidth = function() { return width; }
this.getHeight = function() { return height; }
}
由於由getWidth
和getHeight
限定的封閉件包括width
和height
參數,參數是仍然從方法中使用。但是它們不在其他地方維護,所以一旦構造函數退出,其他代碼就無法訪問它們。因此,width
和height
現在爲Rectangle
私有,並且只能通過提供的存取方法訪問。
除了那些,我會說lambda對他們有一個很好的理論感覺。支持他們的語言感覺更完整,限制更少,並且不那麼混亂。
一元模式完全基於lambda,只能在使用lambda時才能實現。在C#單子 說明: http://ericlippert.com/category/monads/
單子在C++: http://bartoszmilewski.com/2011/07/11/monads-in-c/
的Python: http://www.valuedlessons.com/2008/01/monads-in-python-with-nice-syntax.html
- 1. 使用什麼樣的設計模式?
- 2. 什麼是適用於通知系統的設計模式?
- 3. 什麼設計模式是適用於我的方案
- 4. 這是什麼樣的設計模式?
- 5. 什麼樣的設計模式?
- 6. 什麼樣的設計模式用於分組報表查詢
- 7. 這裏適合什麼設計模式?
- 8. 適用的設計模式
- 9. 爲什麼JavaScript設置的樣式不適用於Ractive.js?
- 10. 什麼樣的設計模式應該用於測試基礎設施
- 11. Java的文件寫入使用什麼樣的設計模式?
- 12. 什麼樣的設計模式適合LOAD-CONVERT-WRITE類似的場景?
- 13. 什麼樣的設計模式用於構建這個複雜的物體
- 14. HNews使用什麼樣的Android UI設計模式閱讀器?
- 15. 什麼樣的設計模式在這裏使用
- 16. 在JAVA中使用什麼樣的設計模式?
- 17. Feature Vector Builder - 什麼樣的設計模式可能有用?
- 18. 設計問題使用什麼樣的模式
- 19. 什麼樣的設計模式對於與數據庫通信有用
- 20. 什麼樣的設計模式用於從Web服務器數據更新NSManagedObjects
- 21. 適用於多模塊Web應用程序的設計模式
- 22. 設計模式 - 這是什麼模式?
- 23. 在什麼情況下,命令鏈設計模式適用?
- 24. 適用於Android的設計模式 - 確保設置GPS位置
- 25. 爲什麼API模式不適用於兩臺XBee設備?
- 26. 適配器設計模式的需求是什麼?
- 27. 什麼設計模式最適合AS3的RTS遊戲?
- 28. 以下情況的適當設計模式是什麼?
- 29. 如何讓設計模式適用於模板用戶控件?
- 30. 什麼設計模式用於API的客戶端?
要密切選民:這是爲什麼 「不是一個真正的問題嗎?」 –