• 设计模式之策略模式


    参考博文:https://www.cnblogs.com/lewis0077/p/5133812.html    侵权删除

    2019-06-17  11:39:49

    策略模式(Strategy)

    什么是设计模式定义了一系列的算法(多种实现子类),并将每一个算法封装(通过父类策略引用访问具体子类的算法)起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。(客户端和具体算法均依赖抽象的策略)

    优点:符合设计模式中的开闭原则(在不修改既有代码的基础上扩展功能)。

    适用性:一个需求有多种不同算法的场合。(不固定的 if-else 场合一般是策略模式的用武之地)

    基本代码如下:

    1 //接口或抽象类,策略接口
    2 public interface Strategy{
    3     //定义抽象的算法方法
    4     public void algorithMethod();
    5 }
    1 //具体的策略1实现
    2 public class ConcreteStrategy1 implements Strategy{
    3         public void algorithmMethod(){
    4         //........具体策略1的方法体
    5     }
    6 }        
    //具体的策略2实现
    public class ConcreteStrategy2 implements Strategy{
            public void algorithmMethod(){
            //........具体策略2的方法体
        }
    }        
     1 public class StrategyContext{
     2     private Strategy strategy; //持有策略的引用
     3     public StrategyContext( Strategy strategy){
    
     4         this.strategy = strategy;
     5     }
     6 
     7     public void contextMethod(){
     8         otherMethod();
     9         strategy.algorithMethod();
    10         otherMethod();
    11     }
    12 }                        
     1   //外部客户端
     2  public class Client{
     3      public static void main(String[] args) {
     4           //具体测策略实现
     5            IStrategy strategy = new ConcreteStrategy2();  //父类引用指向子类
     6           //将具体的策略实现对象注入到策略上下文当中
     7           StrategyContext ctx = new StrategyContext(strategy);
     8           //调用上下文对象的方法来完成对具体策略实现的回调
     9           ctx.contextMethod();  //调用时,会找到具体的策略
    10     }
    11 }     

    总结:

    1 策略上下文依赖抽象策略,具体策略依赖抽象策略。(依赖抽象)

    2 如需要扩展策略功能,在现有的基础上再设计一个策略的实现类,而不需要修改原有的代码。(开闭原则)

    3 父类应用指向子类。(多态)

  • 相关阅读:
    竞赛200
    竞赛202
    判断是node还是 浏览器端 typeof xxx==='string'
    闷油瓶
    关于算法题
    堆 heap, 准备博客参考
    私有npm 上发布 包
    竞赛199
    正则,转换数组
    设计模式之模板设计模式-以spring的各种template为例
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11039111.html
Copyright © 2020-2023  润新知