gpt4 book ai didi

oop - 策略设计模式的确切定义是什么?

转载 作者:行者123 更新时间:2023-12-04 13:01:27 25 4
gpt4 key购买 nike

我与某人就战略模式的真正含义发生了一场极客之争,我需要一位专家来解决这个问题。

我们都同意策略模式允许在运行时交换类的内容(例如行为),同时保持相同的接口(interface)。然而,她的论点是“为了使 [算法] 成为一种策略,你必须得到相同的结果”。我的观点是,交换“算法”或类的逻辑可能意味着被覆盖操作的结果不同,但它仍然符合策略模式的目的、意图(和分类)。

她带有注释的代码示例:

根据您的定义,一个类的任何子类都是一种策略。它们具有相同的方法定义(签名),因此可以互换。

Interface Strategy
{
DoArithmatic(int[] a)
}

Class A : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp += a[i]
}

Class B : Strategy
public int DoArithmaticB(int[]a)
{
int temp = 0;
for(int i =a.length -1; i>-1; i--)
temp += a[i]
}

Class C : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp -= a;
}

int[] a = { 1,2,3 }
ClassA.DoArithmatic(a) = 6
ClassB.DoArithmatic(a) = 6
ClassC.DoArithmatic(a) = -6//This one is not interchangeable

前两个是策略。因为对于任何输入,他们都会给你完全相同的答案。最后一个不是。仅仅因为它给你一个 int 并不能使它成为一种策略。他们必须“做”同样的事情。

您不能仅仅为了使它们成为一种策略而使用“更高”的抽象术语。

这些都做“数学”,但他们并不是都以不同的方式做“相同”的事情。这就是战略的本质。

那么,谁是对的?

最佳答案

您先生是正确的,您的同事需要阅读 GoF。

“策略模式让算法独立于使用它们的客户而变化。”

看:

http://www.dofactory.com/Patterns/PatternStrategy.aspx

关于oop - 策略设计模式的确切定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685826/

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