首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用策略模式干掉 if-else

如何用策略模式干掉 if-else

作者头像
王小明_HIT
发布2022-06-14 16:30:40
3020
发布2022-06-14 16:30:40
举报
文章被收录于专栏:程序员奇点程序员奇点

如何用策略模式干掉 if-else

日常编码过程中遇到很多的 if-else ,代码扩展性和阅读性会受到影响,代码中常常使用策略模式代替 if-else

代码示例:

  /**
     * 上传文件
     *
     * @param storageType 文件存储方式
     * @param file        文件
     */
    public void uploadFile(String storageType, String file) {
        if (storageType.equals(LOCAL)) {
            System.out.println("文件" + file + "已上传到 本地服务器");
        } else if (storageType.equals(FTP)) {
            System.out.println("文件" + file + "已上传到 ftp服务器");
        } else if (storageType.equals(FASTDFS)) {
            System.out.println("文件" + file + "已上传到 fastdfs服务器");
        } else if (storageType.equals(HDFS)) {
            System.out.println("文件" + file + "已上传到 hdfs服务器");
        } else {
            System.out.println("输入的文件存储类型错误");
        }
    }

第一步:创建基类

如果看到上面代码,要怎么优化,抽象一层, 搞个 Base 类:

 public abstract class StorageStrategy{
     public abstract void uploadFile(String file);
 }

第二步:实现基类

让所有业务实现基类接口

public class FtpStorageStrategy extends StorageStrategy {
    @Override
    public void uploadFile(String file) {
        System.out.println("文件" + file + "已上传到 ftp服务器");
    }
}

第三步:查表方式选择基类

既然事查表,当然需要在将创建的处理类,放到一个容器中,这里使用 map,将所有的策略放到一个容器中。

public class Factory {

    private static Map<String,StorageStrategy> strategyMap = new ConcurrentHashMap<>();

    public static void register(String name,StorageStrategy strategy){
        strategyMap.put(name,strategy);
    }

    public static StorageStrategy getInvokeStrategy(String name){
        return strategyMap.get(name);
    }
}

第四步:使用

public class Client {

    public static void main(String[] args) {
        // 获取策略
       StorageStrategy strategy = Factory.strategyMap.get("FTP")
       // 执行策略
       strategy.uploadFile("策略模式.txt");
}
参考资料
  • https://cloud.tencent.com/developer/article/1658355
  • https://juejin.cn/post/6844904022072262670
  • https://www.cnblogs.com/ssskkk/p/13939526.html
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何用策略模式干掉 if-else
  • 第一步:创建基类
  • 第二步:实现基类
  • 第三步:查表方式选择基类
  • 第四步:使用
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档