您的位置:首页 > 其它

设计模式之策略模式

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


这种基于“组合”的设计模式,在灵活度上要优于继承的方式,我们在开发过程中为了让写的应用程序更容易扩展,应多用组合少用继承。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: