[英]in c# what is the difference between strategy pattern and delegates?
我一直在研究策略模式實現示例,在我看來它們與 c# 委托非常相似。 我看到的唯一區別是策略模式實現不需要顯式聲明委托。
但除此之外,它們似乎都指向需要特定簽名的函數,並且它們都可以用於確定在運行時要執行的內容。
我錯過了更明顯的區別嗎?
我想一個相關的問題是,如果它們相似,那么使用一個比另一個有什么優勢?
簡而言之,您可以使用委托來實現策略模式。
策略模式是一種模式。 委托是一種語言功能。 您使用語言功能來實現模式。 它們完全屬於兩個不同的概念類別,但在彼此的相互作用中是相關的。
換句話說,策略模式是藍圖,C# 委托是磚塊。 沒有兩者,您都無法建造(戰略模式)房屋。 (你也可以用其他類型的積木來構建它,但代表的語言特性中沒有任何內容固有地描述策略模式)。
設計模式是針對常見問題的與語言無關的高級解決方案。
委托可用於 .NET 策略模式的特定平台實現,但不是實現此類解決方案的唯一方法。
另一種解決方案是定義一個接口,如:
public interface IStrategy
{
void DoStuff(...)
}
然后,策略將由實現此接口的類而不是委托來表示。
如果您希望您的策略非常簡單,那么委托可能是一個不錯的實現。 對於任何相當復雜的事情,在跟蹤狀態、將事物組織成多個方法、在實現之間共享代碼等方面,將策略實現為接口為您提供了更多選擇。
你會如何在 C# 中實現策略模式?
模式是架構的問題。 代表是一個執行問題。
在 C# 中,策略模式幾乎總是使用委托來實現。
策略模式是一種設計模式,允許您在執行時選擇不同的函數,而委托是一種語言結構,允許您創建對函數的引用並將其用作變量。
策略模式最好用多態而不是委托來實現,因為多態調度更優雅。
可以看到委托類似於 Java 中使用的功能接口——本質上是一個只有一種方法的接口。
從 Java8 開始,您實際上可以以更加匿名/內聯的方式提供功能接口的實現。
對於可以被單一方法覆蓋的行為,執行策略有點矯枉過正,而且過於冗長。
它們本質上解決了“在類中插入可交換行為”的相同目的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.