首页 > 其他分享 >Kotlin设计模式之策略模式

Kotlin设计模式之策略模式

时间:2024-12-14 09:27:11浏览次数:9  
标签:execute 策略 +----------------+ Kotlin 模式 Strategy strategy fun 设计模式

策略模式(Strategy Pattern)用于定义一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式使得算法可以独立于使用它的客户端而变化。以下是Kotlin中实现策略模式的详细过程。

类图

+----------------+       +----------------+
|   Context      |<----->|   Strategy     |
+----------------+       +----------------+
| - strategy: Strategy   | + execute()    |
| + setStrategy(s: Strategy) |
| + executeStrategy()    |
+----------------+       +----------------+
                         | ConcreteStrategyA |
                         +----------------+
                         | ConcreteStrategyB |
                         +----------------+

1. 定义策略接口

策略接口定义了一个方法,所有具体策略类都需要实现这个接口。

// Strategy.kt
interface Strategy {
    fun execute(): String
}

2. 定义具体策略类

具体策略类实现了策略接口,并在方法中执行具体操作。

// ConcreteStrategyA.kt
class ConcreteStrategyA : Strategy {
    override fun execute(): String {
        return "Strategy A executed"
    }
}

// ConcreteStrategyB.kt
class ConcreteStrategyB : Strategy {
    override fun execute(): String {
        return "Strategy B executed"
    }
}

3. 定义上下文类

上下文类维护一个策略实例,并在请求时委托给当前策略处理。

// Context.kt
class Context(private var strategy: Strategy) {

    fun setStrategy(strategy: Strategy) {
        this.strategy = strategy
    }

    fun executeStrategy(): String {
        return strategy.execute()
    }
}

4. 使用示例

// Usage
fun main() {
    val context = Context(ConcreteStrategyA())
    println(context.executeStrategy()) // Output: Strategy A executed

    context.setStrategy(ConcreteStrategyB())
    println(context.executeStrategy()) // Output: Strategy B executed
}

详细讲解

  • Strategy: 策略接口,定义了execute方法,所有具体策略类都需要实现这个接口
  • ConcreteStrategyA和ConcreteStrategyB: 具体策略类,实现了Strategy接口,并在execute方法中执行具体操作。每个策略类封装了一个具体的算法。
  • Context: 上下文类,维护一个策略实例,并在请求时委托给当前策略处理。它提供了setStrategy方法来切换策略。

总结

策略模式的核心在于定义一系列算法,将每个算法封装起来,并使它们可以相互替换。通过这种方式,可以将算法的实现与使用它的客户端分离开来。根据具体需求,可以扩展策略类以支持更多的算法。

标签:execute,策略,+----------------+,Kotlin,模式,Strategy,strategy,fun,设计模式
From: https://blog.csdn.net/fulai00/article/details/144273185

相关文章

  • 解密prompt系列44. RAG探索模式?深度思考模式?
    前一阵多步RAG的风吹入了工业界,kimi推出了探索版本,各应用都推出了深度搜索,You.COM更是早就有了Genius的多步模式。其实都是类似multi-hopRAG的实现。之前学术界在讨论multi-hopRAG的时候总是给一些基于历史知识类的问题,什么某年诺贝尔奖的获奖人在哪读的大学呀,给人一种错觉就是......
  • 【设计模式与体系结构】创建型模式-单例模式
    引言张三和其舍友收假后回到宿舍,并闲聊了起来。张三说:“我昨天吃了家店,菜品很不错。”其舍友也说:“我昨天也在校门口一家新开的店吃了一下,那家新开的店也很不错。”张三说:“我昨天吃的是鸡公煲,你吃的是什么?”其舍友说:“巧了,我吃的也是鸡公煲。”张三说:“学校门口有好几家鸡公煲呢......
  • 前端必须掌握的设计模式——装饰器模式
    目录定义特点场景举例实现装饰器方式TS装饰器不生效问题总结 定义        装饰器模式(DecoratorPattern)属于结构型设计模式。将新的行为以创建类的方式去对原始对象进行包装,在实现同一接口并且不修改原有结构的前提下,达到扩展新行为的目的。简而言之,装饰......
  • 定制链接类名,两类跳转传参,vue路由重定向,404,模式设置
    router-link-exact-active和router-link-active两个类名都太长,可以在router路由对象中定制进行简化//index.js//路由的使用步骤5+2//1.下载v3.6.5//2.引入//3.安装注册Vue.use(Vue插件)//4.创建路由对象//5.注入到newVue中,建立关联//2个核心步骤/......
  • 转载:【AI系统】CUDA 编程模式
    前面的文章对AI芯片SIMD和SIMT计算本质进行了分析,结合英伟达CUDA实现对SIMD和SIMT进行了对比,本文将以英伟达GPU为例,讲解GPU的编程模型。GPU编程模型CUDA英伟达公司于2007年发布了CUDA,支持编程人员利用更为通用的方式对GPU进行编程,更好地发挥底层硬件强大......
  • EHOME视频平台EasyCVR关于监控摄像机电源功率配置及供电模式的选择
    在构建一个高效、可靠的监控系统时,电源配置是至关重要的一环。电源不仅需要为监控摄像头提供稳定的电力支持,还要确保整个系统的长期稳定运行。正确的电源功率配置可以预防许多潜在的问题,比如摄像机的频繁重启、图像质量下降,甚至是设备损坏。本文将深入探讨监控系统中电源功率配置......
  • Freertos低功耗-Tickless模式
    此篇文章在2023年5月15日被记录很多嵌入式设备都对功耗有严格的控制,特别是消费电子对功耗的控制更为严格,Tickless是freertos中的一个可选模块,主要实现低功耗功能STM32类芯片的低功耗模式STM32之类的arm芯片通常有三种低功耗模式:睡眠模式(sleep):仅CPU时钟关闭,其他所有外......
  • 【语法】单例模式
    Python中的单例模式的几种实现方式的及优化-听风。-博客园(cnblogs.com)【理解】【使用场景】目的是保障一个类只会创建一个实例对象,实际使用的时候配置管理类、日志记录类中有使用到。 【单例模式实现方式】 python模块,缺点实例对象的参数是固定的不可变更装饰器,缺......
  • 深入解读 Spring Security 的设备授权码模式:底层运作原理
    1.什么是设备授权码模式 设备授权码模式是OAuth2.1的一种授权模式,旨在解决设备(即客户端)需要访问某些受限的资源但又无法在设备上直接输入用户凭证的情况,比如智能电视、游戏机、IoT设备、打印机等。它是一种再SpringSecurity高版本之后出现的一种新的认证方式。其整体......
  • 杰理-仓储模式未成功进入
    问题:耳机插入测试盒,测试盒显示“命令应答”,拔出耳机,耳机未关机(未进入仓储模式)实际:耳机插入测试盒,测试盒显示“命令应答”,拔出耳机,耳机关机(进入仓储模式),需要LDO唤醒或者开发板自带按键唤醒。调试过程:增加log,跟踪流程。复现未进入仓储模式的情况:没有进行ldo5v_keep_deal处......