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

    策略模式基础讲解已经很详尽:

      https://www.cnblogs.com/lewis0077/p/5133812.html

    补充使用实例1:网络请求重试策略

    策略接口:

    public interface RetryPolicy {
    
        int getMaxNumRetries();
    
    
        void setmMaxNumRetries(int mMaxNumRetries);
    
        /**
         * 重试策略的具体执行:可以根据不同的RequestException作不同的重试 
         */
        boolean retry(RequestException e) ;
    }

    抽象类

    public abstract class AbstractRetryPolicy implements RetryPolicy{
    
        //当前重试次数
        protected int mCurrentRetryCount;
        //最大重试次数
        protected  int mMaxNumRetries;
        //默认的最大重试次数
        public static final int DEFAULT_MAX_RETRIES = 1;
    
    
        public AbstractRetryPolicy() {
            this(DEFAULT_MAX_RETRIES);
        }
    
        public AbstractRetryPolicy(int maxNumRetries) {
            mMaxNumRetries = maxNumRetries;
        }
    
        /**
         * 获取最大重试册书
         * @return
         */
        public int getMaxNumRetries() {
            return mMaxNumRetries;
        }
    
        /**
         * 设置最大重试次数
         * @param mMaxNumRetries
         */
        public void setmMaxNumRetries(int mMaxNumRetries) {
            this.mMaxNumRetries = mMaxNumRetries;
        }
    
    }

    默认重试策略的实现:

    public class DefaultRetryPolicy extends AbstractRetryPolicy {
    
    
        public DefaultRetryPolicy() {
        }
    
        public DefaultRetryPolicy(int maxNumRetries) {
            super(maxNumRetries);
        }
    
        /**
         * 重试策略的具体执行
         * @param e
         * @return
         */
        @Override
        public boolean retry(RequestException e) {
            mCurrentRetryCount++;
            return checkRetry();
        }
    
        /**
         * 检测重试次数是否达到最大重试次数
         * @return
         */
        protected boolean checkRetry() {
            return mCurrentRetryCount <= mMaxNumRetries;
        }
    }

     业务请求实体中会包含一个 RetryPolicy 对象,当需要判断是否需要重试时只需要调用该对象的 retry 函数即可。

    补充使用实例2:网络请求返回数据解析

    在封装网络请求时,需要对远端返回的数据进行解析,但是封装层并不知道数据的结构以及业务端需要的数据。这里可以运用策略模式,抽象原始数据解析接口,业务希望对数据进行不同的解析(加密、压缩),返回一个泛型类。

  • 相关阅读:
    0528习题 11-15
    通过文档算学生的平均分
    给定两个列表,转换为 DataFrame 类型
    一千美元的故事(钱放入信封中)
    pandas 几个重要知识点
    python文件操作
    是否感染病毒
    安装 kreas 2.2.4 版本问题
    小技巧_01
    【Liunx】Linux 系统启动过程
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/10208399.html
Copyright © 2011-2022 走看看