Kotlin实现工厂方法和抽象工厂设计模式

Navicat连接MySQL 8.0报错2059?3步搞定caching_sha2_password加密问题 本文针对Navicat连接MySQL 8.0时出现的2059报错,提供了清晰的解决方案。该错误源于MySQL 8.0默认的身份验证插件caching_sha2_password与旧版客户端不兼容。文章通过三步操作,指导用户修改用户认证方式为mysql_native_password,快速恢复连接,并探讨了升级客户端等长期优化策略。 阅读详情

工厂方法设计模式

工厂方法设计模式,它的核心作用就是通过一个工厂隐藏对象实例的创建逻辑,而不需要暴露给客户端,实现解耦。

典型的使用场景就是当拥有一个父类与多个子类的时候,我们可以通过这种模式来创建子类对象。比如下面的业务场景:一个电脑加工厂,同时生产个人电脑和服务器主机。

package com.agg.kotlinapplication

interface Computer {
    val cpu: String

    companion object Factory {
        operator fun invoke(type: ComputerType): Computer {
            return when (type) {
                ComputerType.PC -> PC()
                ComputerType.Server -> Server()
            }
        }
    }
}

class PC(override val cpu: String = "Core") : Computer

class Server(override val cpu: String = "Xeon") : Computer

enum class ComputerType {
    PC, Server
}

fun main(args: Array<String>) {
    println(Computer.Factory(ComputerType.PC).cpu) // Core
}

companion object Factory:通过伴生对象创建静态工厂方法 ,方便调用。

operator fun invoke:通过运算符重载,简化方法的调用。注:()就是重载过的invoke方法。

抽象工厂设计模式

抽象工厂设计模式,为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。

在上面的工厂方法设计模式中,我们已经很好的解决了电脑厂商生产服务器、PC机的问题,但是如果现在有好几个不同的电脑品牌,如Dell、Asus、Acer,那么就有必要在增加一个工厂类,此时可以采用抽象工厂设计模式,代码如下:

package com.agg.kotlinapplication

interface Computer

class Dell : Computer
class Asus : Computer
class Acer : Computer
class DellFactory : AbstractFactory() {
    override fun produce() = Dell()
}

class AsusFactory : AbstractFactory() {
    override fun produce() = Asus()
}

class AcerFactory : AbstractFactory() {
    override fun produce() = Acer()
}

abstract class AbstractFactory {
    abstract fun produce(): Computer

    companion object {
        inline operator fun <reified T : Computer> invoke(): AbstractFactory =
            when (T::class) {
                Dell::class -> DellFactory()
                Asus::class -> AsusFactory()
                Acer::class -> AcerFactory()
                else -> throw IllegalArgumentException()
            }
    }
}

fun main(args: Array<String>) {
    println(AbstractFactory<Dell>().produce()) // com.agg.kotlinapplication.Dell@f6f4d33
}

 inline operator fun <reified T : Computer> invoke():通过将invoke方法用inline定义为内联函数,进而可以引用reified关键字,使用具体化参数类型的语法特性。

Kotlin和Java一样,由于运行时的类型擦除,并不能直接获取一个参数的类型,然而内联函数会直接在字节码中生成相应的函数体实现,这种情况下我们就可以获取参数的具体类型。

参考:【Kotlin核心编程-水滴技术团队】

新手必看:如何用PhaGCN2和vConTACT2搞定宏病毒组注释(附避坑指南) 本文为宏病毒组研究新手提供了使用PhaGCN2和vConTACT2进行病毒注释的完整实战指南。内容涵盖从Conda环境配置、软件安装、参数解析到结果解读的全流程,并重点分享了整合双工具进行交叉验证的策略与常见报错解决方案,旨在帮助研究者高效、准确地完成病毒分类注释工作。 阅读详情

相关推荐

AWS 小白书 [1] 全球架构

小白应该知道的 AWS 知识

boshansolo的博客 704

Kotlin设计模式:工厂方法详解

工厂方法模式在Kotlin中的应用非常广泛,它通过将对象创建的责任委派给工厂方法,简化了对象创建的复杂性,提高了代码的可维护性和扩展性。在实际开发中,使用工厂方法模式可以有效地管理对象的创建逻辑,避免重复代码,并使代码更具弹性和灵活性。通过本文的讲解和示例代码,希望大家能够更好地理解和应用工厂方法模式,提升Kotlin开发的效率和质量。

虎哥LoveDroid 1713

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 229

OkHttp - 拦截器篇

根据上一篇 核心流程 ,我们大致知道了okhttp的内部运转,但是对于网络请求的缓存、连接复用以及网络监控的功能的实现,我们是只知其然,而不知其所以然,我们只知道是负责各个功能的拦截器帮助我们完成了底层的任务,但是却不知道原理是什么。今天跟着笔者继续学习Okhttp各个拦截器的原理实现。限于篇幅,在文章中,笔者只对相关拦截器的intercept方法进行了分析,但是并没有展开,有兴趣的同学可以自己去看。...

nahfang的博客 2025

DaVinci Configurator BswM模块配置

BswM是AUTOSAR(Automotive Open System Architecture)系统架构中的模块之一,它是基础软件模块(BSW)之一。BswM全称为Basic Software Module Manager(基础软件模块管理器),它负责管理和协调其他BSW模块的行为和交互,以实现整个系统的功能。BswM可以被看作是一个状态机,通过监控系统的状态和事件触发,来控制其他BSW模块的运行状态和互相配合,以达到整个系统的预期行为。

qq_59258431的博客 3945

TI CC2642R蓝牙5.2模块实战:从零搭建智能门锁原型(附电路图)

本文详细介绍了如何基于TI CC2642R蓝牙5.2模块从零搭建智能门锁原型,涵盖硬件选型、低功耗配置、蓝牙安全交互等关键环节。通过CC2642R的高性能MCU和蓝牙5.2技术,开发者可实现低功耗、高安全性的智能门锁设计,并提供实用的电路图和PCB布局建议。

o5p6q的博客 110

Kotlin~工厂方法、抽象工厂模式

工厂方法对比简单工厂,增加了一层工厂抽象,实现专门的工厂生产专门的汽车;抽象工厂相比工厂方法,一个工厂可以生产不同类型的产品。简单工厂模式和工厂方法模式都是创建一类产品的模式,而抽象工厂模式是创建多个产品的模式,但是模式和工厂方法模式相同,只不过抽象工厂需要去写多个产品方法。

Hynson的学习笔记 685

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1257

Kotlin设计模式之工厂方法模式

基本工厂方法模式:使用抽象类或接口定义工厂方法。companion object工厂方法:使用Kotlin的companion object来实现静态工厂方法。sealed class工厂方法:使用sealed class限制子类类型。enum工厂方法:使用enum来实现有限产品类型的工厂方法。根据具体需求选择合适的工厂方法实现方式。

dm菜鸟编程的专栏 649

为YOLO11更换Backbone(一):轻量化之星GhostNet

摘要: 本文重点介绍了轻量化Backbone网络GhostNet及其在YOLO11中的应用。首先分析了Backbone网络在目标检测中的重要性,指出其需平衡特征提取能力和计算效率的需求。然后详细解析了GhostNet的核心思想,包括其通过"幽灵模块"生成冗余特征的设计原理,该模块使用1×1卷积生成少量内在特征,再通过廉价线性变换生成更多幽灵特征,显著降低了计算量。GhostNet的创新设计使其在保持精度的同时大幅减少了参数和FLOPs,为YOLO11等目标检测模型提供了高效的轻量化解决方

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1498

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 40

Kotlin设计模式之抽象工厂模式

基本抽象工厂模式:定义多个产品接口和工厂接口,然后实现这些接口。companion object抽象工厂:使用companion object提供静态工厂方法。sealed class抽象工厂:使用sealed class限制产品类型。根据具体需求选择合适的抽象工厂实现方式。

dm菜鸟编程的专栏 528

【AI黑话日日新】什么是算力调度?

算力调度 = 在有限资源下,把任务智能分配到最合适的计算节点,实现效率、成本、稳定性最优。更完整的定义:算力调度是对 CPU、GPU、内存、网络、存储等异构资源进行统一抽象、感知、决策、分配、监控与自愈的全生命周期管理,是分布式系统的“智能管家”。算力调度不是玄学,它是资源管理 + 算法 + 工程实践的结合。先懂概念 → 再玩工具 → 再写策略 → 再优化算法从单机到集群,从CPU到GPU,从离线到在线,循序渐进未来AI与算力网络时代,算力调度是性价比最高、最稀缺、最长期吃香的技术方向之一。

专注:太空算力、AI infra、异构调度、大模型成本工程 268

Kotlin 设计模式最佳实践第二版(一)

设计模式通过为你提供经过验证的开发范式来帮助你作为开发者加快开发过程。重用设计模式有助于防止可能导致重大问题的复杂问题,改进你的代码库,促进代码重用,并使架构更加健壮。本书的目标是简化 Kotlin 中设计模式的采用,并为程序员提供良好的实践。本书首先向您展示 Kotlin 中更智能编码的实际方面,解释 Kotlin 的基本语法和设计模式的影响。然后,本书深入解释了经典创建型、结构型和行为型设计模式家族,接着转向函数式编程。

龙哥盟 529

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式[1]:创建型设计模式

1.抽象工厂模式介绍(1) 模式简介抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式的核心思想是将对象的创建与使用分离,使得系统可以在不修改代码的情况下切换不同的产品族(工厂方法只有一种产品族)。(2) 使用场景使用场景场景描述数据库驱动和连接DriverManager可以看作抽象工厂,它根据不同的数据库驱动创建不同的Connection,不同数据库有不同的Connection创建不同DAO。

正直朱的博客 894

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《kotlin核心编程》阅读笔记 第九章 设计模式

《kotlin核心编程》阅读笔记 第九章 设计模式第九章 设计模式创建型模式伴生对象增强工厂模式使用单例代替工厂类伴生对象创建静态工厂方法扩展伴生对象方法内联函数简化抽象工厂用具名可选参数而不是构建者模式具名的可选参数require 方法对参数进行约束 第九章 设计模式 基于Kotlin崭新的语言特性,实现或替换了Java中部分典型设计模式。 GoF针对常见设计模式分类:创建型模式、行为型模式、结构型模式。 创建型模式 创建怎样的对象,如何且合适创建它们,以及对类和对象的配置,都是实际代码中编写中需要考虑的

Y_an_Y的博客 1103

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《Kotlin核心编程》笔记:设计模式

主流的创建型模式有:工厂方法模式、抽象工厂模式、构建者模式在有些地方会把工厂模式细分为简单工厂、工厂方法模式以及抽象工厂。这里主要介绍简单工厂的模式,它的核心作用就是通过一个工厂类隐藏对象实例的创建逻辑,而不需要暴露给客户端。典型的使用场景就是当拥有一个父类与多个子类的时候,我们可以通过这种模式来创建子类对象。假设现在有一个电脑加工厂,同时生产个人电脑和服务器主机。我们用熟悉的工厂模式设计描述其业务逻辑: 以上代码通过调用类的方法来创建不同的子类对象,这样我们就把创建实例的逻辑与客户端之间实现解耦,当对象创

川峰的博客 1322

工厂方法模式:对象创建的灵活解决方案

工厂方法模式是面向对象设计中的经典创建型模式,通过将对象创建延迟到子类实现,提供灵活的扩展机制。该模式遵循开闭原则,支持在不修改现有代码的情况下扩展新产品类型,特别适用于需要动态创建相似但差异化对象的场景。在电商支付系统、跨平台UI组件开发等实际工程中,工厂方法模式能显著提升代码的可维护性和扩展性。通过抽象工厂与具体产品的分离,既保证了类型安全,又实现了创建逻辑的封装。现代编程语言如Java、Kotlin等也提供了更简洁的实现方式,使工厂方法模式在当代软件开发中依然保持重要地位。

weixin_29597551的博客 301

【Kotlin设计模式】Kotlin实现工厂模式

工厂模式在解耦对象创建和使用、提高系统扩展性和维护性方面具有明显优势,但在系统复杂性和管理难度上也存在一定的代价。选择是否使用工厂模式应基于系统需求的复杂程度和对象创建的复杂性。

Ho博客 1248

设计模式:简单的抽象工厂模式实现(java&kotlin)

抽象工厂 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 其实就是产品族和产品类型,或多维度的组合 结合工厂模式的例子,工厂模式我们觉得车的例子,车其实就是产品等级维度:可以是轿车,跑车或是SUV,那么产品族是什么,这里可以用品牌举例:宝马,奥

泛泛之素 647

Android常用设计模式-抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种方法来创建一组相关的对象,而不需要关心这些对象的具体实现方式。该模式可以将对象的创建和使用分离,从而提高代码的可维护性和可扩展性。在抽象工厂模式中,我们定义一个抽象工厂接口,用于创建一组相关的对象。该接口中通常包含多个工厂方法,每个工厂方法用于创建一个特定类型的对象。然后,我们可以根据需要实现该接口,以提供具体的工厂实现。抽象工厂模式是一种常用的设计模式,它可以帮助我们创建一组相关的对象,而不需要关心这些对象的具体实现方式。

android_Mr_夏 686

Kotlin抽象工厂模式深度解析:PlantFactory家族对象管理终极指南

Kotlin抽象工厂模式是创建型设计模式中的**终极武器**,专门用于管理**PlantFactory**家族对象的创建过程。在Kotlin语言中,抽象工厂模式通过提供统一的接口来创建相关或依赖对象的家族,而无需指定它们的具体类。这种模式特别适合需要创建多个产品族且不希望客户端代码与具体产品类耦合的场景。 ## 🎯 什么是抽象工厂模式? 抽象工厂模式定义了一个用于创建相关或依赖对象家族的接口

gitblog_00002的博客 947

Kotlin - 改良工厂模式

欢迎关注微信公众号:FSA全栈行动 👋 Kotlin - 改良工厂模式 Kotlin - 改良构建者模式 Kotlin - 改良观察者模式 Kotlin - 改良策略模式 Kotlin - 改良迭代器模式 Kotlin - 改良责任链模式 Kotlin - 改良装饰者模式 一、前言 设计模式是软件工程中解决特定问题的一种指南,我们常说 Java 有 23 种设计模式,而多范式的 Kotlin 作为更好的 Java,拥有很多新的语言特性,在使用原本 Java 中常用的设计模式时,可以有哪些方面的改良呢.

GitLqr的博客 2926

Kotlin入门之Kotlin中的设计模式

由四位大师提出的23种设计模式,对于程序的复用性有很大的意义,这里对于Kotlin中自己了解的几种设计模式进行介绍。 下面将会介绍:单例模式、访问者模式、工厂模式、抽象工厂模式、构建者模式、观察者模式、策略模式、模板方法模式、迭代器模式、责任链模式、状态模式以及装饰器模式。(注意下面的模式都是基于Kotlin来讲解的)

weixin_42514162的博客 1008

15.抽象工厂模式(大话设计模式kotlin版)

抽象工厂模式 定义 **抽象工厂(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口 UML图 AbstractProductA和AbstractProductB:是两个产品的抽象,它们可能有不同的实现。 ProductA1、ProductA2和ProductB1、ProductB2:是两个抽象产品的具体分类的实现。 AbstractFactory:是一个抽象工厂接口,它里面包含所有的产品创建的抽象方法。不同产品的创建,应该使用不同的工厂。 基本实现代码 AbstractF

犟驴的博客 506

安卓常见设计模式3.2------工厂模式,工厂方法模式,抽象工厂模式对比(Kotlin版)

工厂模式是一种创建对象的模式,它通过一个工厂类来封装对象的创建过程。客户端只需要与工厂类交互,而无需直接实例化具体的产品对象。工厂方法模式是一种创建单个对象的模式,它定义了一个工厂方法接口,在具体的工厂类中实现该方法来创建具体的产品对象。,它提供了一个抽象工厂接口,该接口声明了一组创建产品对象的方法。具体的工厂类实现这些方法来创建具体的产品对象。抽象工厂模式适用于创建一系列相关产品的场景,每个具体工厂类负责创建特定产品族的对象。,它通过工厂类的静态方法或实例方法来创建具体产品对象。

jiet_h的博客 877
上一篇: Kotlin实现访问者设计模式
下一篇: Kotlin实现策略和模版方法设计模式
Swuagg
Swuagg 新星创作者: 移动开发技术领域 新星创作者: 移动开发技术领域 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄10年 2355粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值