• 策略模式


    1.定义

    Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换)

    2.模式说明

    Context:封装角色

    屏蔽高层模块对策略、算法的直接访问,封闭可能存在的变化。

    Stratety:抽象策略角色

    定义每个策略或算法必须具有的方法和属性。

    ConcreteStategy:具体策略角色

    3.代码实现

        public interface IStategy
        {
            void DoSomeThing();
        }
    
        public class ConcreteStategy1 : IStategy
        {
            public void DoSomeThing()
            {
    
            }
        }
    
    
        public class ConcreteStategy2 : IStategy
        {
            public void DoSomeThing()
            {
                
            }
        }
    
        public class Context
        {
            private readonly IStategy _stategy;
            //构造函数设置具体策略
            public Context(IStategy stategy)
            {
                _stategy = stategy;
            }
    
            public void DoSomeThing()
            {
                _stategy.DoSomeThing();
            }
        }
        /// <summary>
        /// 场景类
        /// </summary>
        class Program
        {
    
            private static void Main(string[] args)
            {
                ConcreteStategy1 stategy1 = new ConcreteStategy1();
    
                Context context = new Context(stategy1);
    
                context.DoSomeThing();
    
                Console.ReadKey();
            }
    
        }

    4.策略模式的优缺点

    (2)优点

    .扩展性良好。在现有的系统中增加一个策略太容易了,只要实现接口就可以了,其他都不用修改。

    (1)缺点

    .策略类数量增多

    .所有的策略类都需要对外暴露,上层模块必须知道有哪些策略,然后才能决定使用哪一个策略。

  • 相关阅读:
    [LUOGU] 1364 医院设置
    [POJ] 3278 Catch That Cow
    [OpenJudge] 2727 仙岛寻药
    [POJ] 2386 Lake Counting
    [POJ]1118 Lining up
    [LUOGU]1141 01迷宫
    [POJ]1111 Image Perimeters
    python之路——初识函数
    python----------文件操作
    Python中的split()函数的用法
  • 原文地址:https://www.cnblogs.com/JustYong/p/4588957.html
Copyright © 2020-2023  润新知