JAVA设计模式 -- 策略模式

文章介绍了策略模式的概念,它用于封装不同的算法策略并允许它们相互替换,降低了代码的耦合度。文章讨论了策略模式的优缺点,并通过一个吃东西的场景展示了如何定义策略接口、创建具体策略类以及在Spring框架中如何调用和使用这些策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、策略模式是什么?

定义了算法策略,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法策略的用户。


二、策略模式优缺点

  • 可以替换到耦合性高的IF-ELSE;
  • 代码优雅、可复用扩展、便于维护;
  • 策略如果很多的话,会造成策略类膨胀;
  • 使用者必须清楚所有的策略类及其用途;

三、策略模式示例

1.定义策略接口
/**
 * 抽象策略类 --吃饭
 * @Author:lzf
 * @Date: 2023-3-15
 */
public interface DineStrategy {

    void eat();
}

2.定义具体策略类,继承策略接口
/**
 * 具体的策略实现 -- 吃汉堡
 * @Author:lzf
 * @Date: 2023-3-15
 */
@Service("hamburg")
public class HamburgConcreteStrategy implements DineStrategy{

    @Override
    public void eat() {
        System.out.println("我在吃汉堡--");
    }
}
/**
 * 具体的策略实现 -- 吃米饭
 * @Author:lzf
 * @Date: 2023-3-15
 */
@Service("rice")
public class RiceConcreteStrategy implements DineStrategy{
    @Override
    public void eat() {
        System.out.println("米饭真好吃!嘎嘎--");
    }
}

3.调用策略

标准的策略模式还有个Context类用于操作策略的上下文环境,这里示例直接使用的是spring框架,根据对应名称找到对应的实现类。

@SpringBootTest
public class StrategyTest {
    
    @Resource
    ApplicationContext applicationContext;
    
    @Test
    void test(){
        // 实际开发中可以用 参数来调用
        DineStrategy rice = applicationContext.getBean("rice", DineStrategy.class);
        rice.eat();
        DineStrategy hamburg = applicationContext.getBean("hamburg", DineStrategy.class);
        hamburg.eat();
    }
}
3.运行结果

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值