- A+
所属分类:设计模式
定义:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
例子:游戏中的角色可以使用武器,每个角色一次只能使用一个武器,但是可以在游戏中切换武器。
假设现在有三种武器,分别为匕首,弓箭,剑。如果把使用武器的行为直接定义在角色的父类中,当需要增加一个武器比如斧头时,我们不得不修改父类的代码,更严重的问题是并不是所有的角色都能使用斧头,这时还得在子类中覆盖方法。违反了开放封闭原则。
这个模式的核心思想是将变化的部分从主体类中分离出来。这里的主休是角色,变化的部分是使用不同的武器。于是可以将使用武器这个行为单独抽象成一个接口WeaponBehavior,里面的方法为useWeapon();具体使用哪种武器则实现这个接口,比如使用匕首,则KnifeBehavior implements WeaponBehavior。useWeapon(){实现匕首攻击}。而我们的角色类的抽象类为Character,里面有一个WeaponBehavior的实例和一个设定武器的方法setWeapon(WeaponBehavior w),这样角色需要切换武器时,直接调用WeaponBehavior里的userWeapon()即可。在运行状态,通过setWeapon即可动态切换武器。
如果这时我们需要增加一个武器斧头,我们不需要修改之前的所有代码,只需要增加一个实现WeaponBehavior接口的斧头武器行为类AxeBehavior即可。里面的方法useWeapon(){实现斧头攻击}。这样就遵守了开放(易于扩展)封闭(不修改原来的代码)原则。