十三、设计模式之策略模式

策略模式是一种行为型设计模式,通过在运行时切换算法解决复杂维护问题。它包含抽象策略、具体策略和环境角色,允许在不同场景下灵活选择算法。优点包括代码可扩展性和避免多重条件判断,但可能会增加策略类数量。
摘要由CSDN通过智能技术生成

在这里插入图片描述

十三、设计模式之策略模式

在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式
在这里插入图片描述

策略模式:

  • 定义了一组算法(业务规则);
  • 封装了每个算法;
  • 这族的算法可互换代替(interchangeable)
所属类型定义
行为型定义一个算法族,封装每个算法,并使它们可互换。策略允许算法独立于使用它的客户端而变化。

能帮我们干什么?

主要解决什么问题?

主要解决的是 在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。

**何时使用:**一个系统有许多许多类,而区分它们的只是他们直接的行为。

**如何解决:**将这些算法封装成一个一个的类,任意地替换。

优缺点

优点

1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性良好。

缺点:

1、策略类会增多。

2、所有策略类都需要对外暴露。


使用的场景

1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立

角色

策略模式包含以下几个核心角色:

  • 环境(Context):维护一个对策略对象的引用,负责将客户端请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。
  • 抽象策略(Abstract Strategy):定义了策略对象的公共接口或抽象类,规定了具体策略类必须实现的方法。
  • 具体策略(Concrete Strategy):实现了抽象策略定义的接口或抽象类,包含了具体的算法实现。

实现

**关键代码:**实现同一个接口。

策略模式

难度: ⭐️
请添加图片描述

样例代码

java/com/kongxiang/raindrop/dp/type/behavior/strategy · master · 无难事者若执 / 23种设计模式 · GitCode

描述:

计算器 + /, 输入两个数。 算法±*/ 计算

public interface Strategy {
  public int operate(int a , int b );
}

public class AddStrategy implements Strategy{
 @Override
 public int operate(int a, int b) {
     return a + b;
 }
}

public class MovStrategy implements Strategy{
 @Override
 public int operate(int a, int b) {
     return a / b;
 }
}

context 计算 ,输入不同算法,就可以执行获取不同结果

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int execute(int a, int b) {
        return this.strategy.operate(a, b);
    }
}

总结

通过使用策略模式,可以帮助我们在运行时根据需要选择不同的算法,而不需要修改客户端代码。

策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘉羽很烦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值