正式步入码工界,遇到第一个问题就是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();
}
}