将算法封装起来,在实现逻辑中可以随意替换使用不同的算法而不改变原来的类
//动作接口
public interface MoveAble
{
void Move();
}
//攻击接口
public interface AttackAble
{
void Attack();
}
//具体的动作类
public class NormalMove : MoveAble
{
public void Move()
{
Console.WriteLine("普通行走");
}
}
//具体的动作类
public class FastMove : MoveAble
{
public void Move()
{
Console.WriteLine("快速行走");
}
}
//具体的攻击类
public class NormalAttack : AttackAble
{
public void Attack()
{
Console.WriteLine("普通攻击");
}
}
//具体的攻击类
public class MagicAttack : AttackAble
{
public void Attack()
{
Console.WriteLine("魔法攻击");
}
}
//士兵抽象类
public abstract class Soldier
{
public MoveAble move;
public AttackAble attack;
public Soldier(MoveAble move, AttackAble attack)
{
this.move = move;
this.attack = attack;
}
public abstract void Move();
public abstract void Attack();
}
//具体的士兵类
public class NormalSoldier : Soldier
{
public NormalSoldier(MoveAble move, AttackAble attack):base(move,attack)
{
}
public override void Attack()
{
attack.Attack();
}
public override void Move()
{
move.Move();
}
}
class Program
{
static void Main(string[] args)
{
//策略模式
Soldier soldierA = new NormalSoldier(new NormalMove(),new NormalAttack());
soldierA.Move();
soldierA.Attack();
soldierA.attack = new MagicAttack();
soldierA.Attack();
Console.ReadLine();
}
}