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

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

如何用策略模式干掉 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");
}


相关文章
|
物联网
IoT物联网设备OTA固件升级开发实践
通过OTA方式,我们可以对分布在全球各地的IoT设备进行设备固件升级,而不必让运维人员各地奔波。
8513 0
|
人工智能 自然语言处理 搜索推荐
携多项成果亮相云栖大会,探索大模型在云通信中的创新应用与全球实践
2025云栖大会云通信分论坛聚焦大模型与云通信融合,阿里云发布智能联络中心2.0与Chat App AI助理,携手伙伴推动通信智能化升级。
984 1
|
8月前
|
存储 人工智能 数据可视化
2026年cms建站系统行业的未来发展趋势及分析
2026年CMS行业正迈向智能、无头与集成三大方向。通过集成AI大模型实现内容自动化,依托无头架构赋能多端发布,借助低代码平台打破数据孤岛,CMS正从建站工具升级为企业数字化基座。
376 6
|
9月前
|
缓存 安全 物联网
蓝牙1.0到蓝牙信标5.1发展历程:从基础连接到精准定位详解
蓝牙从1.0基础连接发展至5.1厘米级定位,历经经典蓝牙高速传输、BLE低功耗革新,再到AoA/AoD高精度定位突破,推动信标技术在零售、工业、智慧城市等场景广泛应用,持续引领短距离无线连接与定位演进。如果您想进一步了解蓝牙定位技术和案例,欢迎搜索维构lbs智能定位~
|
12月前
|
人工智能 自然语言处理 算法
智能体来了:阿里云×黎跃春共建AI教育与产业融合新生态
2025年被视为“智能体元年”,AI正从工具创新迈向生态融合。阿里云携手黎跃春教授推动“大学生智能体开发实训”,通过零基础教学、产教融合与创业孵化,培养能驾驭AI的新型人才,助力学生从学习到创新、创业的全链条成长,开启教育与产业协同发展的新时代。
669 10
|
12月前
|
前端开发 网络架构 智能硬件
每日一个计算机小知识:Host
每日分享一个计算机小知识:Host(主机)指网络中拥有独立IP、可参与通信的设备,如电脑、手机、服务器等。IP如同设备的“门牌号”,是定位Host的关键。开发中常说的Host多指部署服务的服务器,具备高配置与固定公网IP,便于他人访问接口或网站。
|
12月前
|
人工智能 架构师 搜索推荐
智能体来了:IP操盘手如何用AI智能体实现企业赋能
AI时代,IP操盘手正升级为“AI赋能架构师”。本文以阿里云百炼平台为例,解析如何将IP专业力与AI智能体结合,打造服务企业的“知识库+工具”闭环,实现从内容IP到商业引擎的跃迁。
|
Kubernetes API 调度
在K8S中,创建pod过程?
在K8S中,创建pod过程?
|
敏捷开发 前端开发 Devops
前端研发链路之 CI/CD
本文首发于微信公众号“前端徐徐”,作者徐徐介绍了前端研发链路中的CI/CD。文章从CI/CD的背景、意义、运作方式及常用工具等方面进行了详细探讨,帮助读者理解如何在前端开发中有效应用CI/CD,提升开发效率和产品质量。
771 1
前端研发链路之 CI/CD
|
IDE 开发工具 Windows
idea和webstorm性能优化
本文介绍了如何优化IDE(如IntelliJ IDEA和WebStorm)的性能。当IDE检测到启用实时保护的Microsoft Defender时,可能会影响性能。文章提供了自动或手动配置Defender排除列表的方法,通过将项目路径添加到排除列表中,可以显著提升IDE性能。按照步骤操作,确保以管理员身份运行IDE,以实现最佳效果。
938 1
idea和webstorm性能优化