【设计模式】工厂方法模式 在java中的应用
文章目录
- 1. 引言
- 工厂方法模式的定义
- 2. 工厂方法模式的核心概念
- 工厂方法模式的目的和原理
- 与其他创建型模式的比较(如简单工厂和抽象工厂)
- 3. Java中工厂方法模式的实现
- 基本的工厂方法模式结构
- 示例代码:创建不同类型的日志记录器
- 4. 工厂方法模式的应用场景
- 适用场景说明
- 真实世界的应用示例
- 5. 工厂方法模式的优点与缺点
- 优点分析
- 缺点分析
- 6. 相关设计模式的探讨
1. 引言
工厂方法模式的定义
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,创建对象的任务被交给了一个方法,这个方法通常被称为“工厂方法”。这种模式是通过让其子类决定应该实例化哪一个类来达到将对象创建的过程封装的目的,从而使得系统在不具体指定对象的类型的情况下工作。
工厂方法模式主要解决的问题是在编程环境中,当系统需要引入新的产品时,不需要修改已有的代码,只需要添加新的代码即可,从而增强了系统的可扩展性和可维护性。这种模式非常适合那些结构中存在大量具有相同接口的类的情况。
2. 工厂方法模式的核心概念
工厂方法模式的目的和原理
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,创建对象的任务被一个方法封装起来,而不是直接使用 new
关键字。这种模式是通过定义一个创建对象的接口来实现的,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到其子类。
工厂方法模式主要解决接口选择的问题。它达到了依赖倒置的原则,即“依赖于抽象而不依赖于具体”。使用工厂方法模式的主要目的是增加程序的灵活性和扩展性,同时隐藏具体类的实现细节,减少客户端与具体类之间的依赖。
与其他创建型模式的比较(如简单工厂和抽象工厂)
-
简单工厂模式:简单工厂模式不是一个真正的设计模式,但常被用于创建对象。在简单工厂里,一个工厂类根据传入的参数决定创建出哪一种产品类的实例。这种模式的缺点在于工厂类的职责相对过重,违背了高内聚责任分配原则,一旦需要添加新产品就不得不修改工厂逻辑,这违反了开放封闭原则。
-
抽象工厂模式:抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式通常用来生产产品族的产品。与工厂方法模式的主要区别在于,抽象工厂模式需要处理多个产品,这些产品一起构成了一个产品族。在抽象工厂模式中,每个工厂可以生产多种产品。
抽象工厂方法模式与简单工厂模式的区别主要在于,抽象工厂方法模式的工厂类通常有一个抽象层次,这使得在添加新产品时,只需要添加一个具体的工厂类和产品类,不需要修改已有的工厂和产品类代码,更好地符合开放封闭原则。而与抽象工厂模式相比,简单工厂方法模式在处理单一产品时更为简洁和专注。
3. Java中工厂方法模式的实现
基本的工厂方法模式结构
工厂方法模式主要涉及三个角色:
- 抽象产品(Product):定义了产品的接口,所有具体产品都需要实现这个接口。
- 具体产品(Concrete Product):实现或扩展抽象产品的接口。每个具体产品都对应一个特定的业务或处理逻辑。
- 抽象创建者(Creator):声明工厂方法,该方法返回一个抽象产品类型的对象。创建者类中也可以提供工厂方法的默认实现。
- 具体创建者(Concrete Creator):重写或实现抽象创建者中的工厂方法,以返回一个具体产品的实例。
示例代码:创建不同类型的日志记录器
在这个示例中,我们将定义一个日志记录器接口(抽象产品),具体的日志记录器(如文件日志记录器和控制台日志记录器),以及一个抽象的日志工厂,具体的日志工厂将根据需要创建相应类型的日志记录器。
// 抽象产品
public interface Logger {void log(String message);
}// 具体产品1
public class FileLogger implements Logger {@Overridepublic void log(String message) {System.out.println("Logging to a file: " + message);}
}// 具体产品2
public class ConsoleLogger implements Logger {@Overridepublic void log(String message) {System.out.println("Logging to console: " + message);}
}// 抽象创建者
public abstract class LoggerFactory {public abstract Logger createLogger();// 可以包含一些通用的逻辑public void logMessage(String message) {Logger logger = createLogger();logger.log(message);}
}// 具体创建者1
public class FileLoggerFactory extends LoggerFactory {@Overridepublic Logger createLogger() {// 可以包含创建具体产品的逻辑,例如处理与文件相关的配置return new FileLogger();}
}// 具体创建者2
public class ConsoleLoggerFactory extends LoggerFactory {@Overridepublic Logger createLogger() {return new ConsoleLogger();}
}// 使用示例
public class Demo {public static void main(String[] args) {LoggerFactory factory;Logger logger;// 使用文件日志记录器factory = new FileLoggerFactory();factory.logMessage("This is a file logger example.");// 使用控制台日志记录器factory = new ConsoleLoggerFactory();factory.logMessage("This is a console logger example.");}
}
在这个例子中,LoggerFactory
充当抽象创建者,FileLoggerFactory
和 ConsoleLoggerFactory
是具体的创建者,它们分别创建 FileLogger
和 ConsoleLogger
这两种具体产品。这样的设计允许系统在不直接依赖具体类的情况下增加或替换产品类。
4. 工厂方法模式的应用场景
适用场景说明
工厂方法模式特别适合以下几种情况:
- 创建对象的逻辑复杂:当创建一个对象的决策需要考虑多个因素时,将这些逻辑封装在一个单独的工厂方法中可以避免代码重复,并隐藏复杂的实现细节。
- 产品类层次结构:当产品类有多个等级结构时,工厂方法可以在不同层次中使用,每个具体工厂负责创建特定的产品对象。
- 扩展性要求高:当系统中产品类的种类经常变化,但是客户端仍然使用相同的接口时,工厂方法模式可以很容易地新增新的具体产品类而不需要修改现有代码。
- 解耦框架与实现:工厂方法可以在一个框架中用来封装和隔离具体实现,客户端代码可以通过工厂接口与具体实现解耦。
真实世界的应用示例
在Java标准库中,工厂方法模式的应用非常广泛。以下是一些典型的例子:
java.util.Calendar
:Calendar.getInstance()
是一个工厂方法,它根据当前的地理、政治环境返回不同的日历实现。java.util.ResourceBundle
:ResourceBundle.getBundle()
是一个工厂方法,用于根据不同的地区返回不同的资源束,以支持国际化。java.text.NumberFormat
:NumberFormat.getInstance()
提供了一个工厂方法,根据不同的地区返回不同的格式化对象,用于格式化数字。java.nio.charset.Charset
:Charset.forName(String charsetName)
方法是一个工厂方法,它根据名称返回不同的字符集对象。
这些例子展示了工厂方法模式如何在Java标准库中被用来提供一个统一的接口,同时允许灵活地根据不同的条件返回不同的实例,从而使得库的使用更加灵活和方便。
5. 工厂方法模式的优点与缺点
优点分析
- 增加系统的灵活性:工厂方法模式使得一个类的实例化延迟到其子类,因此在修改或扩展子类时不需要修改原有的代码,符合开闭原则。
- 促进解耦:客户代码从具体类解耦,仅依赖于产品接口。这使得客户代码更加稳定,不受具体实现的变动影响,提高了系统的可维护性。
- 扩展性强:新增一个产品类只需要添加一个具体的产品类和相应的工厂类,无需修改现有系统,易于扩展。
- 屏蔽产品类:产品类的实现如何变化,调用者都不需要关心,它只需要关心产品的接口。这降低了系统的复杂度,提高了程序的可读性和可维护性。
缺点分析
- 类的数量增多:每增加一个产品,相应地也需要增加一个工厂类,这会导致系统中类的个数成倍增加,增加了系统的复杂度。
- 系统的抽象性增加:由于加入了工厂类,需要用户理解这种抽象的概念,并根据抽象来进行系统设计和编码,对初学者不够友好。
- 代码复杂度提高:相较于直接创建实例,使用工厂方法可能会使代码更加复杂或者增加设计上的难度。
总的来说,工厂方法模式在需要保持系统的灵活性和可扩展性时非常有用,尤其是在系统中有多个类的实例需要创建时。然而,这种模式也可能导致代码更加抽象,增加学习和维护的成本。开发者在选择使用工厂方法模式时应当考虑到这些权衡。
6. 相关设计模式的探讨
工厂方法模式是创建型设计模式的一种,但了解其他相关的设计模式可以帮助开发者更全面地理解设计模式在软件开发中的应用。以下是一些与工厂方法模式相关或互补的设计模式:
-
抽象工厂模式:与工厂方法模式类似,抽象工厂模式也用于创建一系列相关或依赖的对象。不同之处在于抽象工厂模式使用多个工厂方法来创建一系列产品,而不是只创建一种产品。
-
建造者模式:当创建复杂对象的算法应与对象的部件及其组装方式解耦时,建造者模式非常有用。这个模式允许你逐步创建复杂对象,使用不同的方法来构建对象的不同部分。
-
单例模式:当系统中需要确保一个类只有一个实例,并且需要一个全局访问点时,单例模式是非常有用的。虽然这不是直接创建对象的模式,但它管理创建和访问对象的方式。
-
原型模式:当创建一个对象的成本较高,且相似对象经常被请求时,原型模式可以克隆已存在的对象而不是新建。
相关文章:
【设计模式】工厂方法模式 在java中的应用
文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较(如简单工厂和抽象工厂) 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码:创建不同类型的日志记录器 4. 工厂方法…...
【热门主题】000079 服务器虚拟化:开启高效计算新时代
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...
软考高项经验分享:我的备考之路与实战心得
软考,尤其是信息系统项目管理师(高项)考试,对于众多追求职业提升与专业认可的人士来说,是一场充满挑战与机遇的征程。我在当年参加软考高项的经历,可谓是一波三折,其中既有成功的喜悦࿰…...
【小白学机器学习38】用np.random 生成各种随机数,随机数数组/序列
目录 0 总结 np.random() 的一些点 1 用np.random.random() 生成[0,1) 区间内的随机数 2 生成指定范围内的随机整数/数组 np.random.randint() 3 用np.random.choice()生成指定数组范围内的随机数 3.1 np.random.choice(array6) 3.2 np.random.choice(array6) ࿰…...
Scala的数组匹配模式
package Test32//匹配:数组:元素的个数 元素的特征 object Test4 {def main(args: Array[String]): Unit {val arr1 Array(1, 2, 3)val arr2 Array(0, 2, 3)val arr3 Array(1, 2, 3, 4)val arr4 Array(-1, 1, 2, 3, 4)val b: Any arr1b match {ca…...
力扣【算法学习day.50】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
C 语言学习的经典书籍有哪些?
学习C语言的理由 C语言是一种程席设计语言,它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行,是因为它简单易用。学习C语言的几个理由如下: (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…...
数据结构——栈
目录 栈的介绍 一、栈的基本概念 1.1 栈的定义 1.2 栈的常见基本操作 二、栈的顺序存储结构 2.1 栈的顺序储存 2.2 顺序栈 2.3 共享栈 三、栈的链式储存结构 3.1 链栈 3.2 链栈的进出栈操作 四、栈的应用 4.1实现斐波那契数列 一、栈的基本概念 1.1 栈的定义 栈…...
开发系统准备与开发环境配置总结
开发前系统配置及环境搭建 系统配置0 Github打不开、速度慢怎么办1 WSL、Linux、Ubuntu、Docker都是什么鬼2 在Windows下安装WSL和Ubuntu3 配置MySQL4 配置Redis并启动服务5 Docker(Windows和Ubuntu下)6 Nginx 系统配置 你好! 这是你第一次使…...
bash: jstack: command not found【jps、jstack、jmap、jstats 命令不生效解决】
JVM 系列文章传送门 初识 JVM(Java 虚拟机) 深入理解 JVM(Java 虚拟机) 一文搞懂 JVM 垃圾回收(JVM GC) 深入理解 JVM 垃圾回收算法 一文搞懂 JVM 垃圾收集器 JVM 调优相关参数 JVM 场景面试题【强烈…...
两数之和问题——c语言
声明: 以下是我在leetcode上面刷题的两数之和问题,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律…...
《沉积与特提斯地质》
《沉积与特提斯地质》为中国地质调查局主管,中国地质调查局成都地质调查中心(西南地质科技创新中心)主办的地学类学术期刊。 《沉积与特提斯地质》创刊于1981年,创刊名为《岩相古地理研究与编图通讯》,后更名为《岩相…...
全面解析 C++ STL 中的 set 和 map
C 标准模板库(STL)中的关联式容器以其强大的功能和高效性成为开发者解决复杂数据组织问题的重要工具。其中,set 和 map 是最常用的两类关联容器。本篇博客将从基本特性、底层实现、用法详解、高级案例以及性能优化等多个角度,详细…...
【RL Application】语义分割中的强化学习方法
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
MySql:Centos7安装MySql
目录 安装之前,清除MySql残留文件 下载MySql的官方yum源 安装MySql 服务 MySql配置 常见问题 本次安装基于Centos7,平台为云服务器,由XShell软件演示。 注意,请将用户切换为Root用户。 安装之前,清除MySql残留文…...
数据结构-散列函数的构造方法
一.数字关键词 关键词存储应该尽可能的离散 直接定址法:利用线性函数,例如上面的例子,h(key)key-1990,key1990,这个就被存放在0的位置 数字分析法:关键字可能有很到位组成,每一位变化可能都不一样,有的位是不变的,就是说不同的对象这一位都是一样的,有的…...
MySQL:DDL数据定义语言
DDL(Data Definition Language),数据定义语言 对数据库的常用操作 查看所有数据库 语法:show databases; 创建数据库 dbname:用户自己定义的数据库名称。 语法:create database [if not exists] dbname [charsetutf8]; 切换…...
【落羽的落羽 C语言篇】指针·之其五
文章目录 一、冒泡排序二、qsort排序1. qsort使用指南2.回调函数3. qsort函数的模拟实现 一、冒泡排序 冒泡排序的核心思想就是:两两相邻的元素进行比较和交换。 现在,我们想编写一个函数,使它能够运用冒泡排序的原理,由小到大排…...
Java程序员最新场景面试题总结
上周,在与部门业务伙伴(BP)的交谈中,我了解到当前求职市场的一个显著现象:她在招聘平台上发布的初级后端岗位每日吸引了超过500份简历的投递。这一现象凸显了Java后端岗位竞争的激烈程度,尤其是在这个技术日…...
平衡性能与隐私:解读Google的服务器端标记
在当前数字化时代,企业需要深入洞察用户行为,以提高网站转化率。然而,随着用户对隐私保护的期待日益提高以及相关法规的收紧,如何兼顾性能与隐私成为了一大挑战。为了解决这一问题,Google推出了服务器端标记࿰…...
在云上怎么样让环境更加安全?
随着云计算的普及,越来越多的企业和组织将其应用迁移到云端。在这个过程中,安全性成为了一个不可忽视的重要因素。华为云作为全球领先的云服务提供商,致力于为用户提供安全可靠的云环境。本文九河云将探讨在华为云上如何增强环境的安全性。 …...
分布式实验一
Socket编程作业: 在Linux系统上,用C编两个程序:Client和Server。两个进程间利用socket进行TCP通信。 要求: Server进程运行后,输出本进程所在主机IP地址以及正在监听的端口号; Client进程运行后,…...
网络安全防护指南
网络安全防护指南 网络安全是指保护网络系统中的硬件、软件及数据不受偶然或恶意原因而遭到破坏、更改或泄露,确保网络系统连续可靠地正常运行。随着互联网的普及和技术的发展,网络安全问题日益严峻,对个人、企业和国家都构成了巨大威胁。因…...
DreamCamera2相机预览变形的处理
最近遇到一个问题,相机更换了摄像头后,发现人像角度顺时针旋转了90度,待人像角度正常后,发现 预览时图像有挤压变形,最终解决。在此记录 一人像角度的修改 先放示意图 设备预览人像角度如图1所示,顺时针旋…...
【Go 基础】channel
Go 基础 channel 什么是channel,为什么它可以做到线程安全 Go 的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存。 前者就是传统的加锁,后者就是 channel。也即,channel 的主要目的就是在多任务间传递…...
长安汽车嵌入式面试题及参考答案
数据结构中的堆栈和编程中的堆栈有什么区别? 在数据结构中,堆栈是一种抽象的数据类型。它遵循后进先出(LIFO)的原则。从操作角度来看,有入栈(push)和出栈(pop)操作。例如…...
理解Linux的select、poll 和 epoll:从原理到应用场景
I/O 多路复用并不是什么新东西,select 早在 1983 年就出现了,poll 在 1997 年,epoll 是 2002 年的产物。面试题总爱问“多路复用多厉害?”其实它就是把轮询的锅甩给了操作系统,而操作系统不过是用 CPU 指令帮你完成事件…...
(一)Linux下安装NVIDIA驱动(操作记录)
目录 一、查看CUDA版本 1.输入nvidia-smi,查看驱动支持的最大CUDA版本,这里是11.6 2.输入nvcc --version,查看当前安装的CUDA版本,这里是11.3 二、卸载旧的NVIDIA驱动 1.卸载原有驱动 2.禁用nouveau(必须&#x…...
二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(2)
前言 上篇介绍了二分法的相关原理并结合具体题目进行讲解运用,本篇将加大难度,进一步强化对二分法的掌握。 一. 寻找峰值 1.1 题目链接:https://leetcode.cn/problems/find-peak-element/description/ 1.2 题目分析: 题目要求返回数组内…...
移动机器人课程建图实验-ROSbug汇总
问题1描述 $ rosrun robot_state_publisher robot_state_publisher [ERROR] [1733131886.474757207]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying...解决方案 这个错误信息表明 robot_state_publisher 节点无法联系到 ROS master。通常&…...
记录vite关于tailwindcss4.0-bate4出现margin[m-*]、padding[p-*]无法生效的问题。
环境如下: vite:5.4.10 tailwindcss: 4.0.0-beta.4 tailwindcss/vite: 4.0.0-beta.4 4.0默认的样式优先级比较低 如果使用了一些reset的css文件 那么很多样式会失效 例如:reset.css中 html, body, ul, li, h1, h2, h3, h4, h5, h6, dl, dt, dd, ol, i…...
WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件
文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …...
redis中jedis和lettuce pool的区别,那个更好,使用范围更广
在 Redis 的 Java 客户端中,Jedis 和 Lettuce 是两种最常用的客户端库,它们都支持连接池(JedisPool 和 Lettuce Connection Pool),但在设计和特性上有显著差异。下面我将详细对比它们的特点,帮助你更好地选择适合的库。 1. 同步 vs 异步 Jedis:是一个 同步 的 Redis 客…...
调试openai 星河大模型的记录:用tcpdump和ngrep抓包
在调试esp32开发板连星河大模型的时候,用requests连星河,怎么也调不通,想通过抓包,看看openai和自己写的到底有啥不一样。 结论:抓包抓到的太多,而且ssl 已经把一些信息都处理过了,看不到报文的…...
树莓派明明安装了opencv和numpy,却找不到
当然不止树莓派,配置python环境都可能存在这个问题 可能是因为安装的 numpy 或者 opencv 版本与 Python 的包路径不匹配。下面是问题的常见原因及解决方法:【方法一和二优先考虑】 原因分析 多版本 Python 环境冲突: 树莓派上可能有多个版本…...
【C++boost::asio网络编程】有关异步读写api的笔记
异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类,主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…...
github仓库自动同步到gitee
Github Actions是Github推出的自动化CI/CD的功能,我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中,所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…...
详解LinkedList中的底层实现
1.LinkedList的构造器 无参构造器 /*** Constructs an empty list.*/ public LinkedList() { } 构造Collection: 只要是 Collection 下的实现类都可以被 LinkedList 构造 // ? extends E: 只要是E的子类及E类型的类都可以使用 public LinkedList(Collection<? extends …...
HTML5动漫主题网站 天空之城 10页 html+css+设计报告成品项目模版
📂文章目录 一、📔网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站演示 五、⚙️网站代码 🧱HTML结构代码 💒CSS样式代码 六、🔧完整源码下载 七、📣更多 一、&#…...
【VSCode】如何修改左侧资源管理器字体大小
方法一 左下角的“设置”—> 选择“窗口” —> 找到 Zoom Level,一般1、2效果就挺大的,可以设置小数0.5、负数-1等,具体设置说明见下图: 这个有一点不好的是,不仅仅资源管理器字体变化,整个VSCode界面会跟着变…...
使用 Visual Studio 开发 Windows 服务
Windows 服务是一种后台运行的应用程序,可以在没有用户界面的情况下执行任务。以下是从概念到具体实现的详细说明。 1. 什么是 Windows 服务 Windows 服务是运行在 Windows 操作系统上的应用程序,具有以下特点: 后台运行:无需用…...
类型转换与IO流:C++世界的变形与交互之道
文章目录 前言🎄一、类型转换🎈1.1 隐式类型转换🎈1.2 显式类型转换🎁1. C 风格强制类型转换🎁2. C 类型转换操作符 🎈1.3 C 类型转换操作符详解🎁1. static_cast🎁2. dynamic_cast&…...
go的web框架介绍
Go 语言有许多优秀的 Web 框架,适用于不同类型的 Web 应用开发,涵盖从简单的 API 开发到复杂的微服务架构。以下是一些常见的 Go Web 框架: 1. Gin 简介:Gin 是一个高性能的 Go Web 框架,设计目标是让开发者能够以极…...
WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
文章目录 1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果 2、案例实现 在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并且能够通过简…...
cocos creator 3.8 抖音、字节跳动录制器 12
property(Node) luzhishijianDisplay: Node null!;//录制时间显示 property(Node) luzhikaishiBut: Node null!;//录制开始 property(Node) luzhijieshuBut: Node null!;//录制结束 luzhikaishiType: boolean false;//是否开始录制开始计时 gameluzhiTime: number 0;onLoa…...
汽车控制软件下载移动管家手机控车一键启动app
移动管家手机控制汽车系统是一款实现车辆远程智能控制的应用程序。通过下载并安装特定的APP,用户可以轻松实现以下功能:远程启动与熄火:无论身处何地,只要有网络,即可远程启动或熄火车辆,提前预冷或预…...
自由学习记录(28)
C# 中的流(Stream) 流(Stream)是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的,提供了多种具体实现,每种实现都针对…...
HarmonyOS开发:关于签名信息配置详解
目录 前言 签名信息的重要性 签名的方式 自动化签名 1、连接真机 2、选择 手动签名 (一)生成密钥和证书请求文件 (二)申请调试证书 (三)注册调试设备 (四)申请调试Profil…...
react 组件双向绑定
1. 使用 state 实现双向绑定 对于双向绑定,需要同时处理表单元素的value属性(通过state来设置)和onChange事件(用于更新state)。 import { useState } from "react";const MyComponent () > {const [i…...
k8s api对象,CRD
在Kubernetes项目中,一个API对象在Etcd里的完整资源路径,是由:Group(API组)、Version(API版本)和Resource(API资源类型)三个部分组成 apiVersion: batch/v2alpha1 kind:…...