2

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

4

3 回答 3

4

该决定由使用策略模式的对象的客户端做出。例如,假设您有一个角色对象,该对象使用不同的攻击方式攻击其他角色,具体取决于角色当时所拥有的武器。然后,当游戏玩家选择角色将使用的武器时,将决定使用哪种策略。

因此,角色和武器(示例中策略模式的两个主要组件)都不能决定使用哪个策略,而是使用角色和武器的代码来决定。通过简单地创建一个新的武器对象(比如 RayGunWeapon)并将其“提供”给您的角色,可以改变角色的行为。

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

于 2009-05-13T04:10:15.013 回答
1

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

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

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

如果您使用 Spring Framework,那么这类似于使用 DI,并且可以像在不同的类中连接一样简单。

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

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

于 2009-05-14T01:52:07.447 回答
0

这完全取决于您何时决定采取哪种策略。有时可以在创建时解决策略,有时它是运行时的事情。简单的答案取决于。

于 2009-05-13T04:00:29.007 回答