学习设计模式之旅 / 策略模式 (Strategy)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://maddish.blog.51cto.com/282288/84802 |
Design Patterns - Strategy
策略模式(Strategy Pattern)属于对象行为型模式,体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。策略模式的定义如下:
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。每一个算法封装到具有共同接口的独立的类中,策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。弱连接的特性使软件具有更强的可扩展性,易于维护;
策略模式中有三个对象:
(1) 环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
(2) 抽象策略对象:它可由接口或抽象类来实现。
(3) 具体策略对象:它封装了实现同不功能的不同算法。
利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。
我们先用一个简单的例子开始. 一个实现游戏中的更换武器的场景。游戏中的每个角色配对一个武器。当然武器是可以随便更换的。。其中定义了角色的抽象,武器的抽象接口。
![]() Heroes(角色)抽象类 定义了 角色名称属性, 武器接口,更换武器的函数,一个虚方法为更换武器的过程。
public abstract class Heroes { public string HeroesName; protected IWeaponBehavior weapon;
public void setWeapon(IWeaponBehavior w) { this.weapon = w; }
public virtual void Fight()
{ throw new Exception(" this method should be Rwritten"); } } // 大法师
public class ArchMage : Heroes { public ArchMage() { this.HeroesName = "法师"; } public override void Fight()
{ Console.Write(this.HeroesName); this.weapon.useWeapoon();
} } 通过以下步骤,开发人员可以很容易地在软件中实现策略模型:
1.对策略对象定义一个公共接口。
2.编写策略类,该类实现了上面的公共接口。
3.在使用策略对象的类中保存一个对策略对象的引用。
该武器为公告接口,具体的共有4种不同的武器(策略类 实现了公共接口) 其中都实现了各自武器的绘画..
// 武器接口
public interface IWeaponBehavior { void useWeapoon(); } // 实现用宝剑挥舞
public class SwordBehavior : IWeaponBehavior { public void useWeapoon() { Console.Write(" 宝剑挥舞 "); } } // 实现匕首刺杀
public class KnifeBehavior : IWeaponBehavior { public void useWeapoon() { Console.Write(" 匕首刺杀 "); } } // 实现用弓箭刺杀 public class BowAndArrowBehavior : IWeaponBehavior { public void useWeapoon() { Console.Write(" 弓箭刺杀 "); 本文出自 “maddish” 博客,请务必保留此出处http://maddish.blog.51cto.com/282288/84802 本文出自 51CTO.COM技术博客 |





maddish
博客统计信息
热门文章
最新评论
友情链接
