在实现策略模式时,应该将决定使用哪种策略的代码放在哪里?一些样本伪代码会有所帮助。
发布于 2009-05-13 04:10:15
该决定由使用策略模式的对象的客户端做出。例如,假设您有一个Character对象,该对象根据角色当时所拥有的武器使用不同的攻击风格攻击其他角色。当玩家选择角色将使用哪种武器时,游戏玩家将决定使用哪种策略。
因此,字符和武器(示例中策略模式的两个主要组件)都不能决定使用哪个策略,而是使用字符和武器的代码来决定使用哪个策略。通过简单地创建一个新的武器对象(比如一个RayGunWeapon)并将其“给”给你的角色来改变角色的行为。
尽管您可以编写显式选择策略的代码,但我认为此模式的真正价值在于它可以在运行时完成。
发布于 2009-05-14 01:52:07
您选择如何实现它将决定代码的位置,以及它是在运行时编译还是在运行时完成。
例如,如果使用依赖注入(DI),则通常可以通过更改xml文件在运行时注入不同的策略。
如果您使用AOP,那么它将在运行时或编译时进行,这取决于您编写方面的方式。
如果您使用Spring Framework,那么这类似于使用DI,并且可以像在不同的类中连接一样简单。
如果你使用一个服务定位器,那么它可能和换一个不同的DLL一样简单。
基本上,实现策略模式的方法有很多种,我只列出了几种,因此它所依赖的评论是非常正确的。
发布于 2009-05-13 04:00:29
这完全取决于你何时决定采取哪种策略。有时可以在创建时解析策略,其他时候则是运行时的事情。答案很简单,视情况而定。
https://stackoverflow.com/questions/855995
复制相似问题