pre { /*控制代码不换行*/ white-space: pre; word-wrap: normal; }

设计模式之策略模式

策略模式是指对象有某个行为,但是在不同的场景中,该行为有不同 的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。或者在设计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();//开火
    }
}

这种基于“组合”的设计模式,在灵活度上要优于继承的方式,我们在开发过程中为了让写的应用程序更容易扩展,应多用组合少用继承。

posted @ 2011-08-26 22:57  monkey's  阅读(250)  评论(0编辑  收藏  举报