Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 基于上下文调用方法的派生alogrithms策略模式_Design Patterns_Strategy Pattern - Fatal编程技术网

Design patterns 基于上下文调用方法的派生alogrithms策略模式

Design patterns 基于上下文调用方法的派生alogrithms策略模式,design-patterns,strategy-pattern,Design Patterns,Strategy Pattern,我需要一些设计帮助。 我有一个类,我们称它为宇宙飞船,它可以实现多种行为。 我定义了一个接口来声明每个行为支持的操作。 到目前为止,这是经典的战略模式 然而,实现的策略需要能够调用上下文类上的操作和方法。我一直在考虑将上下文本身作为接口传递给封装的算法 这是最好的方法吗?如果没有,你会推荐什么 取决于您的策略需要上下文,您可以考虑使用观察者模式使其成为事件,从而使您的策略不与上下文耦合。 例如,如果您的策略导致您的上下文中的某些内容发生变化,则这些事件可能是某些中间人(或您的上下文本身)订阅的

我需要一些设计帮助。 我有一个类,我们称它为宇宙飞船,它可以实现多种行为。 我定义了一个接口来声明每个行为支持的操作。 到目前为止,这是经典的战略模式

然而,实现的策略需要能够调用上下文类上的操作和方法。我一直在考虑将上下文本身作为接口传递给封装的算法

这是最好的方法吗?如果没有,你会推荐什么


取决于您的策略需要上下文,您可以考虑使用观察者模式使其成为事件,从而使您的策略不与上下文耦合。


例如,如果您的策略导致您的上下文中的某些内容发生变化,则这些事件可能是某些中间人(或您的上下文本身)订阅的。

我认为您计划做的事情很好。需要考虑的一件事是不要向行为类的方法传递太多信息。例如,如果你的宇宙飞船有一个
发动机行为
,只把你的
油箱
驱动装置
传递给它,而不是整个宇宙飞船。

我认为这是一个使用依赖注入的好方法。这样,行为不需要跟踪上下文类型,只需要确保操作/方法在上下文类对象上可用。您可以提供上下文类的更多详细信息吗?还是将其纳入太空船类比?