设计模式笔记一(strategy pattern)

来源:互联网 发布:java行业薪资 编辑:程序博客网 时间:2024/05/16 07:35

正式步入码工界,遇到第一个问题就是Refractor老的project,让支持新的功能和策略。

无路可退,便踏上了学习设计模式的征程~

路漫漫其修远兮....


言归正传,第一个学习的对象是strategy pattern,策略模式。

个人知识有限,于是乎,请教一下Wikipedia,找到其定义如下:

策略模式作为软件设计模式,指对象有某个行为,但在不同场景下,该行为有不同的实现算法。

说起场景,行为,要想当年玩CS,被别人拿小刀爆头的壮烈场景~ 

不过也有好处,刚好可以用来解释策略模式~


玩过CS的人都知道,不管警匪都是拿着武器砍对方或者自残(比如可以用手雷)。在不同的场景下,我们会用小刀或者各种不同的枪。

用不同的武器,攻击方式也不一样,比如拿小刀爆头和那小手枪爆头。


首先我们创建一个IWeapon interface来表示各种不同攻击力:

public interface IWeapon     {        void Use();    }

对于不同的武器,I.E. 小刀,手枪,我们实现IWeapon的方法~

 public class Knife : IWeapon     {        public void Use()         {            Console.WriteLine("kill with a knife");        }    }    public class Gun : IWeapon     {        public void Use()         {            Console.WriteLine("kill with a gun");        }    }

不管警匪,都可以使用不同的武器,所以创建一个CS角色,他/她可以使用不同的武器。

   public class CSCharactor     {        private IWeapon weapon;        public void SetWeapon(IWeapon wp)        {            weapon = wp;        }        public void Attack()         {            weapon.Use();        }    }


这样在不同的环境下,我们可以自由的切换不同的武器来砍人了~

static void main(strings[] args){             IWeapon wp = null;            CSCharactor ch = new CSCharactor();            while (true)             {                string input = Console.ReadLine();                switch (input)                 {                    case "1":                        wp = new Knife();                        break;                    default:                        wp = new Gun();                        break;                }                ch.SetWeapon(wp);                ch.Attack();            }}



0 0
原创粉丝点击