美文网首页
Android 进阶- 设计模式 -策略模式

Android 进阶- 设计模式 -策略模式

作者: 伊泽瑞额 | 来源:发表于2019-06-14 12:35 被阅读0次
定义

策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们可以相互替换。策略模式让算法独立于使用它的客户端而独立变化(实际上就是面向接口编程)

使用场景

如果一个功能得实现,可以由多种不同得形式或者算法来实现,就可以使用策略模式来动态地让一个对象在许形式或者算法中选择一种。

策略模式得实现

例子1: 网络引擎得切换:https://www.jianshu.com/p/f7a72d85bd3d
例子2: 以文件、图片命名策略为例:

1. 定义一个策略接口:
package com.example.amn.testdemo;
/**
 * 策略接口
 */
public interface IFileNameGenerator {

    String generate(String imageUri);

}
2. hashcode得方式去命名得实现类 :

package com.example.amn.testdemo;

/**
 * 以hashcode得形式命名
 */
public class HashCodeFileNameGenerator implements IFileNameGenerator {
    @Override
    public String generate(String imageUri) {
        return String.valueOf(imageUri.hashCode());
    }
}

3. MD5得方式去命名得实现类 :
package com.example.amn.testdemo;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * md5
 */
public class Md5FileNameGenerator  implements IFileNameGenerator {

    private static final String HASH_ALGORITHM = "MD5";
    private static final int RADIX = 10 + 26; // 10 digits + 26 letters

    @Override
    public String generate(String imageUri) {
        byte[] md5 = getMD5(imageUri.getBytes());
        BigInteger bi = new BigInteger(md5).abs();
        return bi.toString(RADIX);

    }

    private byte[] getMD5(byte[] data) {
        byte[] hash = null;
        try {
            MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM);
            digest.update(data);
            hash = digest.digest();
        } catch (NoSuchAlgorithmException e) {
        }
        return hash;
    }


}
4. 创建一个管理类管理策略变量调用具体策略所实现的策略接口中的方法 :
package com.example.amn.testdemo;

/**
 * 该方法委托策略变量调用具体策略所实现的策略接口中的方法。

 */
public class FileNameManager {

    private IFileNameGenerator mFileNameGenerator;

    public FileNameManager(IFileNameGenerator fileNameGenerator ){
        this.mFileNameGenerator=fileNameGenerator;
    }

    public String fileNameGenerator(String imgUrl){
       return mFileNameGenerator.generate(imgUrl);
    }
}
5. 使用 :
        String url="";

        //使用hashcode
        FileNameManager fileNameManager = new FileNameManager(new HashCodeFileNameGenerator());
        fileNameManager.fileNameGenerator(url);

        //使用nd5
        FileNameManager fileNameManager1=new FileNameManager(new Md5FileNameGenerator());
        fileNameManager1.fileNameGenerator(url);

相关文章

  • 11.7设计模式-策略模式-详解

    设计模式-策略模式 策略模式详解 策略模式在android中的实际运用 1.策略模式详解 2.策略模式在andro...

  • Android 进阶- 设计模式 -策略模式

    定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们可以相互替换。策略模式让算法独立于使用它的客户端...

  • 策略模式

    Android进阶之设计模式 策略模式 定义: 定义一系列的算法,把每一个算法封装起来,而且使它们可相互替换.策略...

  • Android策略设计模式进阶

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • java/android 设计模式学习笔记(17)---策略模式

    java/android 设计模式学习笔记(17)---策略模式 【备注】只用于个人收藏

  • 建造者模式(Builder 模式)

    Android进阶之设计模式 建造者模式( Builder 模式) 定义:将一个复杂对象的构建与它的表示分离,使得...

  • Android 设计模式之简单工厂模式

    设计模式系列文章 Android 设计模式之单例模式 Android 设计模式之Builder模式 Android...

  • 设计模式整理(7) 状态模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 状态模式和策略模式都是行为型模式。状态模式中的行为是...

  • 【设计模式Android】中介者模式

    设计模式Android 其他相关文章:【设计模式Android】设计模式六大原则【设计模式Android】代理模式...

网友评论

      本文标题:Android 进阶- 设计模式 -策略模式

      本文链接:https://www.haomeiwen.com/subject/ayfffctx.html