设计模式笔记一(strategy pattern)
2015-06-03 15:08
176 查看
正式步入码工界,遇到第一个问题就是Refractor老的project,让支持新的功能和策略。
无路可退,便踏上了学习设计模式的征程~
路漫漫其修远兮....
言归正传,第一个学习的对象是strategy pattern,策略模式。
个人知识有限,于是乎,请教一下Wikipedia,找到其定义如下:
策略模式作为软件设计模式,指对象有某个行为,但在不同场景下,该行为有不同的实现算法。
说起场景,行为,要想当年玩CS,被别人拿小刀爆头的壮烈场景~
不过也有好处,刚好可以用来解释策略模式~
玩过CS的人都知道,不管警匪都是拿着武器砍对方或者自残(比如可以用手雷)。在不同的场景下,我们会用小刀或者各种不同的枪。
用不同的武器,攻击方式也不一样,比如拿小刀爆头和那小手枪爆头。
首先我们创建一个IWeapon interface来表示各种不同攻击力:
对于不同的武器,I.E. 小刀,手枪,我们实现IWeapon的方法~
不管警匪,都可以使用不同的武器,所以创建一个CS角色,他/她可以使用不同的武器。
这样在不同的环境下,我们可以自由的切换不同的武器来砍人了~
无路可退,便踏上了学习设计模式的征程~
路漫漫其修远兮....
言归正传,第一个学习的对象是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(); } }
相关文章推荐
- PHP 多维数组
- linux档案对比diff / meld
- spark与hadoop集成详解
- 表单提交是否为空
- android GPS HAL 回调函数实现
- Deep Learning Tutorials
- 恩智浦半导体推出近距离非接触式读卡器IC CLRC663
- Cocos2d-X之别踩白块
- Method Swizzling
- 内存数据库-Redis介绍
- 工作流应用场景简单介绍
- JAVA迭代器学习--在JAVA中实现线性表的迭代器
- BACK
- 遍历Map的四种方法
- USB OTG简介、与普通USB线的区别
- USB OTG简介、与普通USB线的区别
- web.xml之context-param,listener,filter,servlet加载顺序及其周边
- 将二维数组按键值相同的重组数组
- GPS编码格式及C语言解码
- php面向对象(OOP)—不同php版本构造方法的继承和兼容