gpt4 book ai didi

c# - 策略模式与多态有何不同?

转载 作者:太空宇宙 更新时间:2023-11-03 21:05:37 24 4
gpt4 key购买 nike

在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法的行为。

策略模式...

  • 定义了一系列算法。
  • 封装每个算法。
  • 使该系列中的算法可以互换。

(来源:Wikipedia)

在我的例子中,我希望能够将不同的哈希算法注入(inject)到服务中。 C# 有几个派生自 HashAlgorithm 的哈希算法,例如:

  • MD5
  • SHA256 管理
  • RIPEMD160托管

鉴于这种层次结构,这看起来像策略模式,但如果我从未听说过策略模式,我可能会说这是多态性的经典示例。

在设计代码来解决我的特定问题时,我设计了一个基于策略模式的接口(interface)来注入(inject)不同的哈希算法:

public interface IHashStrategy
{
Hash ComputeHash(byte[] data);
}

用法

public sealed class HashCreator
{
public Hash GetHash(IHashStrategy strategy, byte[] data)
{
return strategy.ComputeHash(data);
}
}

回到我之前的例子,我同样可以完全摆脱接口(interface),只使用HashAlgorithm:

public sealed class HashCreator
{
public Hash GetHash(HashAlgorithm algorithm, byte[] data)
{
return new Hash(algorithm.ComputeHash(data));
}
}

问题 1:策略模式与多态有任何不同,还是因为多态才存在策略模式?

问题 2:这里哪一个被认为是更好的做法;将我需要的功能抽象到接口(interface)中 (IHashStrategy) 还是使用基本类型 (HashAlgorithm)?

最佳答案

多态性 只是 OO 语言的一个特性,它允许您为不同的类型使用一个接口(interface)。 Strategy 是概念模式,它使用 OO 语言中的多态性,例如它可以用函数式编程中的函数来完成。

如你所说,

the strategy pattern (also known as the policy pattern) is a behavioural software design pattern that enables an algorithm's behavior to be selected at runtime

所以,不仅仅是多态,你可以为对象的行为设置不同的策略,你可以改变策略,比如你的对象可以有几个策略,不同的对象可以有相同的策略,一种类型的对象可以有不同的策略,都是有道理的。多态性只是一种方式(恕我直言,是 OO 语言的最佳方式),您可以如何实现它。

关于c# - 策略模式与多态有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41359897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com