策略模式

策略模式:strategy。

1.该模式适用于某一事物具有多套算法,并且算法相互替换的情形。

2.基本思路。利用开发语言的特性,将特定算法独立出来,在超类中添加独立算法接口的引用。具体在实现该超类的子类中,负责将动作接口指向具体的(接口)实现类。从而达到只修改局部,不影响全局的目的。

3.核心思想。将易改动部分独立出来,缩小改动范围,利用开发语言特性中的多态、接口。面向接口编程,调动时动态加载动作算法实例。

附:具体实例。

public class Smoker
    {
        private cigarette _cigarette;

        public Smoker(cigarette c)
        {
            this._cigarette = c;
        }
        public void SetCigarette(cigarette c)
        {
            this._cigarette = c;
        }

        public void Smoke()
        {

            if (_cigarette != null)
            {
                _cigarette.Smoke();
            }

        }
    }
    public class OutSide : cigarette
    {
        public void Smoke()
        {
            Console.WriteLine("在户外,可以抽烟");
        }
    }

    public class Indoor : cigarette
    {
        public void Smoke()
        {
            Console.WriteLine("在市内,不能抽烟");
        }
    }

    public class PetrolStation : cigarette
    {
        public void Smoke()
        {
            Console.WriteLine("在加油站,严禁抽烟");
        }
    }

    /// <summary>
    /// 香烟
    /// </summary>
    public interface cigarette
    {
        /// <summary>
        /// 抽烟
        /// </summary>
        void Smoke();
    }

调用代码:

Smoker smoker = new Smoker(new OutSide());
smoker.Smoke();
smoker.SetCigarette(new Indoor());
smoker.Smoke();
smoker.SetCigarette(new PetrolStation());
smoker.Smoke();

结果:

在户外,可以抽烟
在市内,不能抽烟
在加油站,严禁抽烟

 

posted @ 2009-11-26 08:46  Shapley  阅读(210)  评论(0编辑  收藏  举报