千家信息网

Java中怎么用策略模式实现条件判断

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"Java中怎么用策略模式实现条件判断",内容详细,步骤清晰,细节处理妥当,希望这篇"Java中怎么用策略模式实现条件判断"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2026年11月02日Java中怎么用策略模式实现条件判断

本文小编为大家详细介绍"Java中怎么用策略模式实现条件判断",内容详细,步骤清晰,细节处理妥当,希望这篇"Java中怎么用策略模式实现条件判断"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

定义

策略模式定义了一系列算法,并且将每个算法封装起来,使得他们可以相互替换,而且算法的变化不会影响使用算法的客户端。

使用场景

  • 一个系统需要动态的在几种算法中选择一种,可以把每个算法封装到具体的策略类中

  • 一个类中定义了多种行为,可以去代替条件转移语句,减少硬编码

  • 系统中各个算法或者说函数是彼此独立的,而且要求对客户隐藏算法具体实现细节的时候

  • 多个类只区别在表现行为的不同,可以使用策略模式,在运行时动态的选择要执行的行为

案例

需求

根据不同的水果口味,制作不同的蛋糕,比如现在有苹果味和香蕉味的蛋糕,入参为苹果味,则制作苹果味蛋糕;入参为香蕉味,则制作香蕉味的蛋糕

实现方案

定义制作蛋糕的抽象类

/** * 蛋糕制作抽象类 * @author:liyajie * @createTime:2022/2/24 10:53 * @version:1.0 */public abstract class CakeHandler {    /**     * 制作蛋糕     * @author: liyajie     * @date: 2022/2/24 10:54     * @param     * @return void     * @exception:     * @update:     * @updatePerson:     **/    public abstract void makeCake();}

定义制作苹果味蛋糕的策略类,继承制作蛋糕抽象类,重写makeCake方法

/** * 制作苹果蛋糕策略 * @author:liyajie * @createTime:2022/2/24 10:55 * @version:1.0 */public class AppleCakeHandler extends CakeHandler{    @Override    public void makeCake() {        System.out.println("正在制作苹果蛋糕");    }}

定义制作香蕉味蛋糕的策略类,继承制作蛋糕抽象类,重写makeCake方法

/** * 制作香蕉蛋糕策略 * @author:liyajie * @createTime:2022/2/24 10:55 * @version:1.0 */public class BananaCakeHandler extends CakeHandler{    @Override    public void makeCake() {        System.out.println("正在制作香蕉蛋糕");    }}

定义枚举类,来制作蛋糕的策略

/** * 制作蛋糕枚举 * @author:liyajie * @createTime:2022/2/24 10:57 * @version:1.0 */public enum CakeEnum {    APPLE(AppleCakeHandler.class.getSimpleName(),new AppleCakeHandler()),    BANANA(BananaCakeHandler.class.getSimpleName(),new BananaCakeHandler());    private final String cakeType;    private final CakeHandler cakeHandler;    CakeEnum(String cakeType, CakeHandler cakeHandler){        this.cakeType = cakeType;        this.cakeHandler = cakeHandler;    }    // 匹配策略类    public static CakeEnum match(String cakeType){        CakeEnum[] values = CakeEnum.values();        for (CakeEnum cakeEnum : values) {            if(cakeType.equals(cakeEnum.cakeType)){                return cakeEnum;            }        }        return null;    }    public String getCakeType(){        return cakeType;    }    public CakeHandler getCakeHandler(){        return cakeHandler;    }}

定义测试类

/** * 测试类 * @author:liyajie * @createTime:2022/2/24 11:07 * @version:1.0 */public class Test {    public static void main(String[] args) {        String cakeType = AppleCakeHandler.class.getSimpleName();        CakeEnum cakeEnum = CakeEnum.match(cakeType);        CakeHandler cakeHandler = cakeEnum.getCakeHandler();        cakeHandler.makeCake();        cakeType = BananaCakeHandler.class.getSimpleName();        cakeEnum = CakeEnum.match(cakeType);        cakeHandler = cakeEnum.getCakeHandler();        cakeHandler.makeCake();    }}

查看测试结果

方案分析

通过该案例的实现,我们可以看到,使用策略模式+枚举,替换掉了if--else的硬编码,并且把不同的策略封装到了单独的实现类中,防止一个策略出现问题后影响到其他的策略,提高了系统的可扩展性,最大程度上实现了开闭原则。

总结

优势

  • 多重条件语句属于硬编码不易维护,而使用策略模式可以避免使用多重条件语句

  • 策略模式提供了一系列算法,恰当的使用继承或者实现,可以把算法族里面的公共代码提到父类里面。这样就会避免重复的代码

  • 策略模式可以提供相同行为的不同实现,客户端可以根据具体的业务逻辑去选择合适的

  • 策略模式完美契合开闭原则,可以在不修改或者少修改源代码的情况下,灵活增加、减少、修改新 算法

  • 策略模式把算法的使用放到环境类中,而算法的实现在具体策略类中,实现了二者的分离

劣势

  • 在实际业务逻辑非常复杂的情况下,会导致出现很多策略类

  • 客户端必须在恰当的时候,使用恰当的算法类,才能合理完成业务逻辑

读到这里,这篇"Java中怎么用策略模式实现条件判断"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

策略 蛋糕 制作 算法 模式 条件 苹果 香蕉 不同 客户 行为 恰当 业务 客户端 文章 系统 编码 语句 逻辑 封装 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 互联网科技公司起名 互联网科技工作委员会副主任毛军 中国互联网科技工作委员会毛军 互联网养老 桔豆科技 美国互联网前沿科技 深圳互联网科技怎么样 汉立互联网科技有限公司联系电话 福州新华互联网科技学校 知乎 阿里互联网科技公司 呼和浩特新华互联网科技学院 深圳市罗太互联网科技有限公司 广州富喜互联网络科技 张召忠谈中国互联网科技 普陀区互联网教育科技管理办法 互联网科技手机排行榜 北京天晋互联网科技有限公司 悟空问答互联网科技 三亚科技创新互联网基地 善班互联网科技 善班互联网科技有限公司 融势互联网科技 有木互联网科技 科技互联网大厂 新兴科技互联网创新大赛颁奖典礼 怎样加入科技互联网 珠海东科互联网科技有限公司 三亚科技创新互联网基地 山东亿川互联网科技有限责任公司
0