设计模式之策略模式
策略模式是指对象有某个行为,但是在不同的场景中,该行为有不同 的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。或者在设计FPS游戏中,武器都有开火的行为,武器不同,其行为的算法都会不一样。
看下面代码:
/// <summary> /// 武器行为 /// </summary> public interface IWeaponBehavior { //开火 void Fire(); } /// <summary> /// (手_枪) /// </summary> public class Gun : IWeaponBehavior { #region IWeaponBehavior 成员 //手_枪开火 public void Fire() { Console.WriteLine("手_枪开火!"); } #endregion } /// <summary> /// 大炮 /// </summary> public class Cannon : IWeaponBehavior { #region IWeaponBehavior 成员 //大炮开火 public void Fire() { Console.WriteLine("大炮开火!"); } #endregion } /// <summary> /// 游戏者 /// </summary> 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 { /// <summary> /// 调用 /// </summary> /// <param name="args"></param> 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();//开火 } }
这种基于“组合”的设计模式,在灵活度上要优于继承的方式,我们在开发过程中为了让写的应用程序更容易扩展,应多用组合少用继承。