实施战略模式

时间:2009-05-13 03:59:03

标签: design-patterns strategy-pattern

在实施策略模式时,在哪里放置确定使用哪种策略的代码?一些示例伪代码会有所帮助。

3 个答案:

答案 0 :(得分:4)

该决定由使用策略模式的对象的客户端做出。让我们举例来说,你有一个角色对象,它使用不同的攻击方式攻击其他角色,该攻击方式基于角色当时所构成的武器。当玩家选择角色将使用哪种武器时,决定使用哪种策略。

因此,角色和武器(示例中战略模式的两个主要组成部分)都决定使用哪种策略,而不是使用角色和武器的代码。只需创建一个新的武器对象(比如一个RayGunWeapon)并将它“赋予”你的角色就会改变角色的行为。

即使您可以编写明确选择策略的代码,我认为这种模式的真正价值在于它可以在运行时完成。

答案 1 :(得分:1)

如何选择实现它将决定代码的位置,以及代码是在运行时编译还是在运行时完成。

例如,如果使用依赖注入(DI),那么通常可以通过更改xml文件在运行时注入不同的策略。

如果您使用AOP,那么它将在运行时或编译时,具体取决于您编写方面的方式。

如果你使用Spring Framework,那就类似于使用DI,并且可以像在不同的类中一样简单。

如果您使用服务定位器,那么它可能就像交换不同的DLL一样简单。

基本上有很多方法可以实现策略模式,我刚刚列出了一些,所以它所依赖的评论是非常正确的。

答案 2 :(得分:0)

这一切都取决于你何时决定采取哪种策略。有时可以在创建时解析策略,有时可以解决运行时的问题。这取决于简单的答案。