策略模式与多态有何不同?
How does the strategy pattern differ from polymorphism?
在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法的行为。
策略模式...
- 定义了一系列算法。
- 封装每个算法。
- 使该系列中的算法可以互换。
(来源:Wikipedia)
就我而言,我希望能够将不同的哈希算法注入到服务中。 C# 有几个派生自 HashAlgorithm 的哈希算法,例如:
- MD5
- SHA256 托管
- RIPEMD160Managed
鉴于这种层次结构,这看起来像是策略模式,但如果我从未听说过策略模式,我可能会说这是多态性的经典示例。
在设计代码来解决我的特定问题时,我设计了一个基于策略模式的接口来注入不同的哈希算法:
public interface IHashStrategy
{
Hash ComputeHash(byte[] data);
}
用法
public sealed class HashCreator
{
public Hash GetHash(IHashStrategy strategy, byte[] data)
{
return strategy.ComputeHash(data);
}
}
回到我之前的例子,我同样可以完全摆脱接口,只使用 HashAlgorithm
:
public sealed class HashCreator
{
public Hash GetHash(HashAlgorithm algorithm, byte[] data)
{
return new Hash(algorithm.ComputeHash(data));
}
}
问题1:策略模式与多态有什么不同,还是因为多态才存在策略模式?
问题 2: 这里认为哪个是更好的做法;将我需要的功能抽象到接口中 (IHashStrategy
) 或使用基本类型 (HashAlgorithm
)?
多态性 只是 OO 语言的一个特性,它允许您为不同的类型使用一个接口。 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 语言的最佳方式),您可以如何实现它。
在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法的行为。
策略模式...
- 定义了一系列算法。
- 封装每个算法。
- 使该系列中的算法可以互换。
(来源:Wikipedia)
就我而言,我希望能够将不同的哈希算法注入到服务中。 C# 有几个派生自 HashAlgorithm 的哈希算法,例如:
- MD5
- SHA256 托管
- RIPEMD160Managed
鉴于这种层次结构,这看起来像是策略模式,但如果我从未听说过策略模式,我可能会说这是多态性的经典示例。
在设计代码来解决我的特定问题时,我设计了一个基于策略模式的接口来注入不同的哈希算法:
public interface IHashStrategy
{
Hash ComputeHash(byte[] data);
}
用法
public sealed class HashCreator
{
public Hash GetHash(IHashStrategy strategy, byte[] data)
{
return strategy.ComputeHash(data);
}
}
回到我之前的例子,我同样可以完全摆脱接口,只使用 HashAlgorithm
:
public sealed class HashCreator
{
public Hash GetHash(HashAlgorithm algorithm, byte[] data)
{
return new Hash(algorithm.ComputeHash(data));
}
}
问题1:策略模式与多态有什么不同,还是因为多态才存在策略模式?
问题 2: 这里认为哪个是更好的做法;将我需要的功能抽象到接口中 (IHashStrategy
) 或使用基本类型 (HashAlgorithm
)?
多态性 只是 OO 语言的一个特性,它允许您为不同的类型使用一个接口。 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 语言的最佳方式),您可以如何实现它。