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


相关文章
|
6月前
|
设计模式 算法 前端开发
【面试题】什么是策略模式?用了策略模式之后,再也不用写那么多 if else 了,真香!
【面试题】什么是策略模式?用了策略模式之后,再也不用写那么多 if else 了,真香!
|
3月前
|
设计模式
学会了这个设计模式,再也不是只会写if/else了
本文详细介绍了责任链设计模式(Chain of Responsibility Pattern),这是一种行为型设计模式,用于创建一个接收者对象的链,通过解耦请求的发送者和接收者,允许沿着链传递请求,直到某个接收者能够处理它。
学会了这个设计模式,再也不是只会写if/else了
|
3月前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
63 2
|
6月前
|
设计模式 算法 前端开发
还在用if-else? 用策略模式干掉它
策略模式是一种**行为**设计模式,它将一组行为转换为对象, 并使其在原始上下文对象内部能够相互替换。大白话就是比如我写一个登录业务,目前需要满足能通过系统内、微信等平台进行登录,未来还有可能引入其他的平台,这个时候就可以采用策略模式,来让不同的平台的登录都有对应的策略路径。
85 3
还在用if-else? 用策略模式干掉它
|
6月前
|
设计模式 Java 开发者
一目了然!谁能想到Java多线程设计模式竟然被图解,看完不服不行
多线程设计模式在Java编程中起着至关重要的作用,它能够有效提高程序的执行效率,使得程序在处理大量数据和复杂任务时更加高效。然而,对于初学者来说,理解和应用多线程设计模式可能是一项相当具有挑战性的任务。为了让读者更加轻松地掌握这一复杂主题,我们带着一种全新的图解方式,深入剖析Java多线程设计模式的精髓。
|
6月前
|
算法
犯错总结--工厂模式和策略模式傻傻没分清
犯错总结--工厂模式和策略模式傻傻没分清
60 0
犯错总结--工厂模式和策略模式傻傻没分清
|
6月前
|
设计模式 算法 前端开发
【面试题】如何理解 前端设计模式-测策略模式?
【面试题】如何理解 前端设计模式-测策略模式?
|
6月前
|
设计模式 算法 Java
二十三种设计模式全面解析-当你的代码需要多种算法时,策略模式是你的救星!
二十三种设计模式全面解析-当你的代码需要多种算法时,策略模式是你的救星!
|
6月前
|
设计模式 存储 缓存
二十三种设计模式全面解析-探索解释器模式的高级应用和优化技巧:解锁代码解析的新境界
二十三种设计模式全面解析-探索解释器模式的高级应用和优化技巧:解锁代码解析的新境界
|
设计模式 网络协议 Java
经典永不过时!重温设计模式
在软工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的,设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常件有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题。
192 1
经典永不过时!重温设计模式