当前位置:  开发笔记 > 编程语言 > 正文

战略设计模式的确切定义是什么?

如何解决《战略设计模式的确切定义是什么?》经验,为你挑选了2个好方法。

我曾与某人就战略模式的真正斗争而斗争,我需要专家来解决这个问题.

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

她的代码示例带有注释:


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

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并不是一个策略.他们必须"做"同样的事情.

你不能只使用"更高"的抽象术语来使它们成为一种策略.

这些都是"MATH",但它们并非都以不同的方式做"相同"的事情.这是战略的本质.

那么,谁是对的?



1> Daniel P. Bu..:

你先生是对的,你的同事需要阅读GoF.

"战略模式让算法独立于使用它们的客户."

看到:

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



2> eljenso..:

从技术上讲,战略可以做任何他们想做的事.

只有当"外部环境"规定某些固定且可重复的行为无法在程序界面中捕获(称之为"理想属性")时,您需要注意您的策略是真正可替代的L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L这些理想的特性.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有