zoukankan      html  css  js  c++  java
  • 策略模式

    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)缺点

    .策略类数量增多

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

  • 相关阅读:
    C#处理json实战
    HDU3994(Folyd + 期望概率)
    POJ1270 Following Orders (拓扑排序)
    HDU 3634 City Planning (离散化)
    HDU4762(JAVA大数)
    POJ3026(BFS + prim)
    POJ1679(次小生成树)
    UVA10487(二分)
    ZOJ 2048(Prim 或者 Kruskal)
    FZU 1856 The Troop (JAVA高精度)
  • 原文地址:https://www.cnblogs.com/JustYong/p/4588957.html
Copyright © 2011-2022 走看看