学习设计模式之旅 / 策略模式 (Strategy)

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(" 弓箭刺杀 ");

你可能感兴趣的:(设计模式,职场,策略,休闲,策略模式 )