设计模式之策略模式
策略模式是指对象有某个行为,但是在不同的场景中,该行为有不同 的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。或者在设计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();//开火
}
}
这种基于“组合”的设计模式,在灵活度上要优于继承的方式,我们在开发过程中为了让写的应用程序更容易扩展,应多用组合少用继承。

浙公网安备 33010602011771号