策略模式与委托模式(非委托)有何区别?
策略模式是解决常见软件问题的一种非常具体的设计方案。
策略模式意味着将会有:
委托更像是一种原则而不是一种模式。委托意味着代替单个对象负责所有事情,将职责委托给其他对象。之所以这是一种常见的技术,是因为它通过减少耦合和增加内聚性来执行两个更基本的软件开发原则。
说了这么多,不要担心模式。专注于原则,如果感觉自己的解决方案可以改进-看看模式是否有更好的方法。如果你把重点放在模式而不是原则上,你会发现自己迷失在所有的模式中,并且为了实现模式而实现模式。
“委托”并不是一个设计模式,而更像是一种通用的编程技术,其中组件A将任务(任何类型的任务)委派给组件B。委托可以在许多上下文中使用。
另一方面,“策略”模式是一种特定的模式,通常将委派作为实现细节大量使用。
例如,您可以实现策略模式并使用以下方式调用它:
strategy.execute(x)
策略模式涉及到在运行时选择您的策略接口的各种实现,并选择适当的实现。调用该实现的行为是委派。
因此,这不是非此即彼的问题,这些概念是互补的。
有一个想法:
委托模仿委托类(至少我是这样使用的,不确定是否是规范方式,但通常是这样做)。因此,如果我有一个具有多个入口点(方法)的类,并且我想在运行时更改实现,则会创建实现相同接口的委托。
另一方面,如果我想要在运行时交换类的某个部分,则会创建策略类,其中包含单个方法接口(例如executeCalculation),并将其作为包含类的聚合组件。
因此,策略涵盖单个行为,委托实现一组行为,您可以使用委托来实现策略。