簡體   English   中英

在 C# 中,策略模式和委托有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM