您的位置:首页 > 其它

设计模式笔记一(strategy pattern)

2015-06-03 15:08 176 查看
正式步入码工界,遇到第一个问题就是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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: