ser*_*0ne 1 c# oop polymorphism design-patterns strategy-pattern
在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法的行为。
策略模式...
(来源:维基百科)
就我而言,我希望能够将不同的哈希算法注入到服务中。C# 有多种源自HashAlgorithm 的哈希算法,例如:
考虑到这个层次结构,这看起来像策略模式,但如果我从未听说过策略模式,我可能会说这是多态性的经典示例。
在设计代码来解决我的特定问题时,我设计了一个基于策略模式的接口来注入不同的哈希算法:
public interface IHashStrategy
{
Hash ComputeHash(byte[] data);
}
Run Code Online (Sandbox Code Playgroud)
用法
public sealed class HashCreator
{
public Hash GetHash(IHashStrategy strategy, byte[] data)
{
return strategy.ComputeHash(data);
}
}
Run Code Online (Sandbox Code Playgroud)
回到我之前的例子,我同样可以完全摆脱界面并只使用HashAlgorithm:
public sealed class HashCreator
{
public Hash GetHash(HashAlgorithm algorithm, byte[] data)
{
return new Hash(algorithm.ComputeHash(data));
}
}
Run Code Online (Sandbox Code Playgroud)
问题 1:策略模式与多态性有什么不同,还是因为多态性才存在策略模式?
问题 2:这里认为哪种做法更好?将我需要的功能抽象为接口 ( IHashStrategy) 还是使用基本类型 ( HashAlgorithm)?
多态性只是面向对象语言的一项功能,它允许您为不同类型提供一个接口。策略是概念模式,它使用 OO 语言中的多态性,例如可以使用函数式编程中的函数来完成。
正如你提到的,
策略模式(也称为策略模式)是一种行为软件设计模式,允许在运行时选择算法的行为
所以,它不仅仅是多态性,你可以为对象行为设置不同的策略,你可以改变策略,例如,你的对象可以有几个策略,不同的对象可以有相同的策略,一种类型的对象可以有不同的策略,有一点。多态性只是实现它的一种方法(恕我直言,这是面向对象语言的最佳方法)。
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |