策略模式是指对象有某个行为,但是在不同的场景中,该行为有不同 的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。或者在设计FPS游戏中,武器都有开火的行为,武器不同,其行为的算法都会不一样。
看下面代码:////// 武器行为/// public interface IWeaponBehavior{ //开火 void Fire();} ////// (手_枪)/// public class Gun : IWeaponBehavior{ #region IWeaponBehavior 成员 //手_枪开火 public void Fire() { Console.WriteLine("手_枪开火!"); } #endregion} ////// 大炮/// public class Cannon : IWeaponBehavior{ #region IWeaponBehavior 成员 //大炮开火 public void Fire() { Console.WriteLine("大炮开火!"); } #endregion} ////// 游戏者/// public class Gamer{ //武器行为 IWeaponBehavior _Weapon; public IWeaponBehavior Weapon { get { return this._Weapon; } set { this._Weapon = value; } } public Gamer() { } //开火 public void Fire() { this._Weapon.Fire(); }} class Program{ ////// 调用 /// /// static void Main(string[] args) { IWeaponBehavior gun = new Gun();//实例化手_枪 IWeaponBehavior cannon = new Cannon();//实例化大炮 Gamer gamer = new Gamer();//实例化游戏者 gamer.Weapon = gun;//武器换到手_枪 gamer.Fire();//开火 gamer.Weapon = cannon;//武器换到大炮 gamer.Fire();//开火 }}
这种基于“组合”的设计模式,在灵活度上要优于继承的方式,我们在开发过程中为了让写的应用程序更容易扩展,应多用组合少用继承。