在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法的行为。
战略模式......
(来源:Wikipedia)
就我而言,我希望能够将不同的哈希算法注入服务中。 C#有几种衍生自HashAlgorithm的散列算法,例如:
鉴于这种层次结构,这看起来像战略模式,但我从未听说过策略模式,我可能只是说这是多态性的典型例子。
在设计代码以解决我的特定问题时,我设计了一个基于策略模式的接口来注入不同的散列算法:
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
)?
答案 0 :(得分:4)
多态性只是OO语言的一个特性,它允许您为不同类型提供一个接口。 策略是概念模式,它在OO语言中使用多态,因为它可以通过函数编程中的函数来完成。
如你所说,
所以,它不仅是多态,你可以为对象行为设置不同的策略,你可以改变策略,例如,你的对象可以有很少的策略,不同的对象可以有相同的策略,一种类型的对象可以有不同的策略,有一点。多态性只是一种方式(对于OO语言imho来说是最好的方式),你可以如何实现它。策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法行为