策略模式与多态性有何不同?

时间:2016-12-28 10:19:15

标签: c# oop design-patterns polymorphism strategy-pattern

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

战略模式......

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

(来源:Wikipedia

就我而言,我希望能够将不同的哈希算法注入服务中。 C#有几种衍生自HashAlgorithm的散列算法,例如:

  • MD5
  • SHA256Managed
  • 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)?

1 个答案:

答案 0 :(得分:4)

多态性只是OO语言的一个特性,它允许您为不同类型提供一个接口。 策略是概念模式,它在OO语言中使用多态,因为它可以通过函数编程中的函数来完成。

如你所说,

  

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

所以,它不仅是多态,你可以为对象行为设置不同的策略,你可以改变策略,例如,你的对象可以有很少的策略,不同的对象可以有相同的策略,一种类型的对象可以有不同的策略,有一点。多态性只是一种方式(对于OO语言imho来说是最好的方式),你可以如何实现它。