策略模式 Strategy Pattern

    策略模式——定义了算法族,分别分装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。(摘自《Head First Design Patterns》)       以下是自已用VS画了一个简图:        武器接口:       
/// <summary>

    /// 武器接口

    /// </summary>

    public interface IWeapon

    {

        /// <summary>

        /// 武器攻击

        /// </summary>

        void UseWeapon();

    }
        实现的4个武器:       
public class Axe : IWeapon

    {

        #region IWeapon 成员



        /// <summary>

        /// 斧头砍劈

        /// </summary>

        public void UseWeapon()

        {

            Console.WriteLine("斧头砍劈");

        }



        #endregion

    }



public class Knife : IWeapon

    {

        #region IWeapon 成员



        /// <summary>

        /// 实现匕首刺杀

        /// </summary>

        /// <remarks></remarks>

        public void UseWeapon()

        {

            Console.WriteLine("匕首刺杀");

        }



        #endregion

    }



public class BowAndArrow : IWeapon

    {

        #region IWeapon 成员



        /// <remarks>弓箭射击</remarks>

        public void UseWeapon()

        {

            Console.WriteLine("弓箭射击");

        }



        #endregion

    }



public class NoWeapon : IWeapon

    {

        #region IWeapon 成员



        /// <summary>

        /// 没有武器

        /// </summary>

        public void UseWeapon()

        {

            Console.WriteLine("没有武器");

        }



        #endregion

    }
        接下来是人的抽象类:       
public abstract class BasePerson

    {

        private IWeapon _weapon;



        public IWeapon Weapon

        {

            get

            {

                return _weapon;

            }

            set

            {

                _weapon = value;

            }

        }

    

        public void SetWeapon(IWeapon w)

        {

            this._weapon = w;

        }



        public abstract void Fight();



        public void UseWeapon()

        {

            this.Weapon.UseWeapon();

        }

    }
        然后实现一个陆军一个海军使用武器(一时没想出什么好的名称,就随便拿海军陆军充当了):       
public class Army : BasePerson

    {

        public Army()

        {

            this.SetWeapon(new NoWeapon());

        }

        public override void Fight()

        {

            Console.Write("Army ");

            UseWeapon();

        }

    }
 public class Navy : BasePerson

    {

        public Navy()

        {

            this.SetWeapon(new NoWeapon());

        }

        public override void Fight()

        {

            Console.Write("Navy ");

            UseWeapon();

        }

    }
       现在来看看调用,每个人都可以换武器攻击以产生不同的效果,就实现了策略模式的思想:       
Army army = new Army();

            army.Fight();

            army.SetWeapon(new Knife());

            army.Fight();

            army.SetWeapon(new Axe());

            army.Fight();

            Navy navy = new Navy();

            navy.Fight();

            navy.SetWeapon(new BowAndArrow());

            navy.Fight();
       输出结果:
     Army 没有武器
     Army 匕首刺杀
     Army 斧头砍劈
     Navy 没有武器
     Navy 弓箭射击
        没有怎么写过BLOG,看看自己的空空的,就随手写了一些,还忘大家不要见笑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值