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:网络请求返回数据解析

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

  • 相关阅读:
    微信H5跳转到小程序
    对比React的hooks与Vue的composition
    H5网页在ios,android,微信中打开手机中的地图导航
    MySQL学习笔记(一)
    Matlab学习笔记(五)
    Matlab学习笔记(四)
    Matlab学习笔记(三)
    Matlab学习笔记(二)
    Matlab学习笔记(一)
    Python学习笔记(四)
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/10208399.html
Copyright © 2011-2022 走看看