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

    策略模式

    一、简介

    策略模式是定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。策略模式模式使得算法可独立于使用它的客户而独立变化。

    二、使用场景

    • 需要安全的封装多种同一类型操作时
    • 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。
    • 一个抽象类有多个子类,而又需要条件语句来选择具体子类时。

    三、策略模式简单实现

    这里举一个排序的例子来说明策略模式,我们知道对一个List进行排序有很多方式比如冒泡、插入、快排等等。我们可以根据需求来选择不同的排序方式进行排序。所以我们可以定义一个排序策略类

    //排序策略类
    public interface SortStragety{
        void sort();
    }
    
    //具体排序
    public class BubbleSort implements SortStragety{
    
        @Override
        public void sort() {
            Log.i(TAG, "sort: Bubble Sort");
        }
    }
    
    public class InsertSort implements SortStragety{
    
        @Override
        public void sort() {
            Log.i(TAG, "sort: Insert Sort");
        }
    }
    
    //操作策略类的Context类
    public class SortContext{
        private SortStragety sortStragety;
    
        public void setSortStragety(SortStragety sortStragety) {
            this.sortStragety = sortStragety;
        }
    
        public void sort(){
            this.sortStragety.sort();
        }
    }
    
    //调用
      SortContext sortContext= new SortContext();
      sortContext.setSortStragety(new BubbleSort());
      sortContext.sort();
    

    四、小结

    在某些情况下我们可能根据不同的情况和场景来选择不同的解决方式,此时我们一般使用if/else等条件语句来处理,这样做固然简单但是当场景增加或者某种场景的处理需要修改时我们需要手动修改代码最终会使得代码结构臃肿、复杂从而难以维护。如果此时采用策略模式根据不同场景采用不同的策略,这样即便是增加新的场景我们只需要创建新的策略即可。

  • 相关阅读:
    5. 字符串提取
    4.字符串连接
    3. 忽略大小写的字符串比较
    2.Calendar类的使用
    1.==和equals()
    50.使用DOM4J解析XML文件
    C# json提取多层嵌套到数组
    打开SDK Manager检查Android SDK下载和更新失败的解决方法
    (微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
    javascript里面的数组,json对象,动态添加,修改,删除示例
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13794945.html
Copyright © 2011-2022 走看看