策略模式与委托模式之间的区别

时间:2009-08-03 21:55:53

标签: design-patterns delegation strategy-pattern

策略模式和委托模式(不是委托)之间有什么区别?

4 个答案:

答案 0 :(得分:21)

策略模式是针对常见软件问题的非常具体的设计解决方案。 策略模式暗示会有

  • 一个名为Strategy的界面(或者将Strategy作为名称的一部分)。这个接口应该有一个名为execute()的方法。
  • 一个或多个具体类,称为ConcreteStrategyA,ConcreteStrategyB等,它们实现了Strategy接口。
  • 还应该有一个包含策略的上下文类

委托更像是一个委托而不是模式。委托意味着不是让一个对象负责一切,而是将责任委托给其他对象。这是一种常见技术的原因是它通过减少耦合和增加凝聚力来强制执行软件开发的两个更基本的原则。

说了这么多,不要担心模式。专注于校长,如果你觉得你的解决方案可以改进 - 看模式,看看是否有更好的捕鼠器。如果你专注于模式而不是主体,你会发现自己迷失在所有模式中并为实现模式而实现模式......

答案 1 :(得分:12)

“委托”实际上不是一种设计模式,它更像是一种通用编程技术,其中组件A将任务(可能是任何类型的任务)委托给组件B.委托可以在许多上下文中使用。

另一方面,战略模式是一种特定的模式,通常会大量使用委托作为实施细节。

例如,您可以实现策略模式并使用

调用它
strategy.execute(x)

策略模式涉及到Strategy接口的各种实现,并在运行时选择适当的实现。调用该实现的行为是委托。

所以它不是/或者,概念是免费的。

答案 2 :(得分:2)

这是一个想法:

代表模仿委托类(至少我已经使用过它们,不确定这是否是规范方式,但这就是我通常的方式)。所以基本上,如果我有一个具有多个入口点(方法)的类,并且我想在运行时更改实现,我将创建委托实现相同的接口。

另一方面,如果我希望能够在运行时交换类的一部分,我将使用单个方法接口(例如,executeCalculation)创建策略类,并使其成为聚合组件包含类。

总而言之,策略包含单个行为,委托实现一组行为,您可以使用委托来实现策略。

答案 3 :(得分:0)

如果你的意思是策略模式与委托,就像在参数中传递的functions / lambdas一样, 那么至少我知道需要为代表编译的类的开销较少。

我实际上发现这个页面正在寻找有人给我他们对仍然使用设计模式路径的好处的想法,因为java 8和C#现在都支持将函数作为参数传递