策略模式和委派模式(不是代表)有什么区别?

有帮助吗?

解决方案

策略模式是针对常见软件问题的非常具体的设计解决方案。战略模式意味着将会有

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

授权与其说是一种模式,不如说是一种原则。委托意味着不是让单个对象负责所有事情,而是将责任委托给其他对象。这是一种常见技术的原因是,它通过减少耦合和增加内聚性来强制执行软件开发的两个更基本的原则。

说了这么多,不用担心模式。专注于原理,如果您认为您的解决方案可以改进 - 查看模式,看看是否有更好的捕鼠器。如果您关注模式而不是原则,您会发现自己迷失在所有模式中,并且为了实现模式而实现模式......

其他提示

“委派”是不是一个真正的设计模式,它更像是一个普通的编程技术,其中组分A代表的任务(无论何种任务,可能是)与组分B.代表团可以在许多环境中使用的。

在策略模式,在另一方面,是其通常大量使用委托的作为一个实现细节的特定图案。

例如,可能实现策略模式,并使用它调用

strategy.execute(x)

策略模式涉及具有你的策略接口的各种实施方式,并在运行时选择适当的执行。调用该实现的行为是一行。

因此,这不是任一/或,其概念是免费的。

下面有一个想法:

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

如果,在另一方面,我曾我希望能够在运行时交换,我想创建与单个方法接口战略类(例如executeCalculation)并使其聚集体组分的一类中的一个部分包含类。

因此,在总结,一个战略包括一个单一的行为,代表执行一组行为,你可以使用委托执行战略。

如果你的意思策略模式VS代表,如在函数/ lambda表达式作为参数传递, 然后至少我知道有在需要被编译为代表的类而言更少的开销。

其实,我找到了这个网页找人给我上依然采用了设计模式途径给予这两个8的Java和C#现在支持传递函数作为参数的好处,他们的想法

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top