当前位置: 首页 > article >正文

【Typescript】11-类抽象类与面向对象建模

类、抽象类与面向对象建模TypeScript 不是一门纯粹的面向对象语言但它对类系统的支持足够完整足以覆盖很多工程场景。问题在于很多人学到class之后会误以为这就是组织 TypeScript 代码的默认方式。现实恰恰相反类是重要工具但不是默认答案。这一篇的重点不是带你机械复习“什么是封装、继承、多态”而是更现实地回答三个问题TypeScript 里的类到底能做什么抽象类和接口分别适合什么位置在现代 JavaScript/TypeScript 工程里什么时候该用类什么时候不该用类首先是一种“带状态和行为的实例模型”最基本的类写法如下classUser{constructor(publicid:number,publicname:string){}greet(){returnHello,${this.name};}}这里的public id: number和public name: string是一种语法简写表示在构造函数接收参数同时把它们声明成实例属性这使得类特别适合表达“一个对象既有数据又有围绕这些数据运作的方法”的场景。类和普通对象最大的区别不在语法而在实例语义普通对象很适合表示数据constuser{id:1,name:Alice};而类更适合表示“可被实例化、可带行为、可能有生命周期”的实体classTimer{privatestartTimeDate.now();getElapsedTime(){returnDate.now()-this.startTime;}}所以你可以把类理解成一种更强的组织方式但前提是你真的需要这种“实例化对象 行为封装”的模型。访问修饰符让类更适合做封装TypeScript 支持这些访问修饰符publicprivateprotectedreadonly看一个例子classAccount{publicowner:string;privatebalance:number;constructor(owner:string,balance:number){this.ownerowner;this.balancebalance;}deposit(amount:number){this.balanceamount;}getBalance(){returnthis.balance;}}这里owner可以在外部访问balance只能在类内部访问private的价值不只是“防止乱改”更是让你能够清晰地区分哪些是对外暴露的稳定接口哪些是内部实现细节这对于 SDK、服务对象、领域模型非常重要。protected适合“对子类开放、对外部隐藏”classBaseService{protectedlog(message:string){console.log([service],message);}}classUserServiceextendsBaseService{createUser(){this.log(create user);}}protected允许子类使用但外部实例不能直接访问。这类能力在可继承的基类设计里很常见。readonly能表达对象生命周期中的不变部分classOrder{constructor(publicreadonlyid:string,publicstatus:pending|paid){}}这里的id一旦构造完成就不允许再变。这个约束非常贴近业务语义也比靠注释说“不要改它”更可靠。实现接口把能力边界和实现细节分开interfaceLogger{log(message:string):void;}classConsoleLoggerimplementsLogger{log(message:string){console.log(message);}}这里接口和类的分工非常清楚接口定义“应该具备什么能力”类负责“具体怎么实现”这种模式在这些场景中非常常见依赖注入策略模式适配器模式可替换服务实现如果你希望系统依赖的是能力而不是某个具体类接口就很重要。抽象类适合“部分规则固定部分细节留给子类”抽象类和接口容易被混淆但它们解决的问题不完全一样。看一个例子abstractclassAnimal{abstractspeak():void;move(){console.log(moving);}}classDogextendsAnimal{speak(){console.log(wang);}}这里Animal不能直接被实例化它提供了通用实现move()同时强制子类实现speak()你可以把抽象类理解成“半成品基类”。它适合那些某些流程是固定的但某些具体步骤必须交给不同子类补齐接口和抽象类怎么选一个简单的判断标准如果你只想描述能力契约用接口如果你还想提供一部分共享实现用抽象类接口更轻耦合更低抽象类更强但也更容易把继承树绑得太紧。工程上通常是优先接口只有当共享实现真的有价值时再考虑抽象类。继承不是错但通常不是第一选择现代 JavaScript/TypeScript 社区对继承更谨慎不是因为继承不能用而是因为很多系统最后都会被深层继承链搞得越来越难维护。例如父类改一点多个子类都受影响子类不小心依赖了父类内部实现细节行为分发越来越难追踪所以比起“默认继承”很多项目更倾向于对象组合函数式封装接口 多实现这类方式通常更灵活也更适合现代前端和 Node.js 工程。类什么时候真的有优势类最适合这些场景SDK 封装带内部状态的服务对象插件系统有生命周期管理的对象明确存在多种实现并共享部分基础逻辑的体系例如数据库客户端、消息队列客户端、缓存实例、编辑器插件体系都很适合类。类什么时候反而会让事情更糟如果你只是想表达一份数据或者封装一段纯函数逻辑类很可能会引入额外复杂度。例如一个简单工具函数库一组纯数据转换逻辑一个没有实例状态的工具模块这些场景里普通函数和对象字面量往往更清晰。一个更现实的 TypeScript 观点学类系统当然重要但更重要的是别被“类就是高级架构”的幻觉带偏。真正成熟的工程判断不是“我会不会写 class”而是“这段问题到底需要实例、封装、继承、多态中的哪一种能力”。如果答案都不需要那就别强上类。本文小结TypeScript 的类系统足够强抽象类、访问修饰符、接口实现都能支持你完成相当完整的面向对象建模。但类不是默认模板而是一种在合适场景下非常有效的组织工具。真正好的设计不是让代码更像教科书里的 OOP而是让业务边界更清楚、职责更稳定、扩展更自然。练习写一个Shape抽象类包含getArea()抽象方法和一个通用的printName()方法。用接口定义Payment然后实现WechatPayment和AlipayPayment两个类并比较接口与抽象类在这个场景中的区别。选择你项目里的一个工具模块思考它究竟更适合普通函数还是类说明理由。后记2026年5月22日于上海。

相关文章:

【Typescript】11-类抽象类与面向对象建模

类、抽象类与面向对象建模 TypeScript 不是一门纯粹的面向对象语言,但它对类系统的支持足够完整,足以覆盖很多工程场景。问题在于,很多人学到 class 之后,会误以为这就是组织 TypeScript 代码的默认方式。现实恰恰相反&#xff1…...

Perplexity反义词≠低困惑度?——斯坦福NLP实验室内部培训材料首次公开的4层认知陷阱

更多请点击: https://kaifayun.com 第一章:Perplexity反义词≠低困惑度?——认知错位的根源剖析 Perplexity(困惑度)是语言模型评估中被广泛误读的核心指标。许多人直觉认为“低困惑度即好模型”,甚至将“…...

AI生成镜头如何通过DIT审核?——Netflix《The Last Frame》技术白皮书首度公开(附VFX合规性检查清单PDF)

更多请点击: https://kaifayun.com 第一章:AI视频生成在电影制作中的应用 AI视频生成技术正深刻重构电影工业的工作流,从前期预演到后期特效,再到个性化内容分发,其渗透已覆盖创作全生命周期。传统依赖高成本实拍与手…...

Sora 2提示词失效真相大起底(92%用户踩中的3类语义断层陷阱)

更多请点击: https://kaifayun.com 第一章:Sora 2提示词失效的底层归因与认知重构 Sora 2提示词失效并非表层的语法错误或格式偏差,而是源于其多模态对齐机制中语义解码器与时空生成器之间的结构性错配。当用户输入“雨夜东京涩谷十字路口&a…...

【Sora 2批量视频生成黄金工作流】:实测吞吐提升4.8倍的关键配置——NVIDIA A100集群下每小时稳定输出217段1080p视频

更多请点击: https://codechina.net 第一章:Sora 2批量视频生成工作流全景概览 Sora 2作为新一代多模态视频生成模型,其批量处理能力依托于模块化、可编排的端到端工作流设计。该工作流融合提示工程、时空 latent 编码、分块并行解码与后处理…...

从零开发游戏需要学习的c#模块,第二十一章(精灵动画 —— 让角色走起来)

今天我们要学习的内容是 理解精灵图集的原理 加载精灵图集并切帧 实现四方向行走动画 静止时显示待机帧 第一步:准备精灵图集 精灵图集就是一张大图里包含多个小图(帧),播放时依次显示每一帧,形成动画效果。 一…...

黎曼猜想:哲学 × 数学 思维范式全链条

黎曼猜想:哲学 数学 思维范式全链条 华夏之光永存|七大数学猜想思维范式全链条 第二篇开篇 黎曼猜想被公认为数学史上最伟大的未解难题。希尔伯特曾说:“如果我沉睡百年后醒来,第一个问题就是:黎曼猜想证明了吗&…...

P vs NP:西方哲学 × 西方计算理论 —— 人类思维的终极边界

P vs NP:西方哲学 西方计算理论 —— 人类思维的终极边界 华夏之光永存|七大数学猜想思维范式全链条 第一篇开篇 P vs NP 是计算机科学第一难题,克雷数学研究所七大千禧年难题之一。 本文不宣称证明、不跳步、不民科、不超纲。 只用哲学与数…...

暗黑破坏神2存档编辑器完整指南:三步轻松修改D2/D2R角色与装备

暗黑破坏神2存档编辑器完整指南:三步轻松修改D2/D2R角色与装备 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备却一无所获?是否因为早期加点失误导致角色后期无法应…...

HS2-HF_Patch:Honey Select 2 终极汉化与功能增强完整指南

HS2-HF_Patch:Honey Select 2 终极汉化与功能增强完整指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch 是专为 Honey Select 2 游戏…...

在Nodejs后端服务中集成稳定可靠的大模型能力

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Nodejs后端服务中集成稳定可靠的大模型能力 应用场景类,针对需要构建智能对话或内容生成功能的后端工程师&#xff0…...

CANN/pypto copysign函数API文档

# pypto.copysign 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A…...

app应用接入广告的完整流程和方法:从零搭建可持续变现体系

随着移动互联网进入存量竞争阶段,用户流量增长趋于饱和,单纯依靠用户新增实现产品增值的模式已然失效。对于绝大多数免费工具、社交、资讯、游戏类 APP 而言,合规、稳定、可持续的广告变现,已经成为补齐产品商业闭环、维持产品长期…...

2026 主流技术栈:hermes agent多环境安装配置:Windows/Mac/Linux

一、Hermes agent 大模型选择 Hermes Agent 通过统一的模型抽象层接入不同厂商的大语言模型服务。实际部署时,建议根据数据合规要求、任务类型和成本预算进行选型。 1.1 国内场景:Kimi K2.6 对于数据需境内处理或存在私有化部署需求的场景&#xff0c…...

机器学习评价指标之综合指标的关系

综合指标的关系宏平均考虑每个类别的个别表现,并对它们的评价指标(比如准确率、召回率等)进行平均。每个类别 被视为同等重要,无论类别的大小或样本数量。微平均则关注整体表现,它将所有类别的预测结果合并起来&#x…...

红黑树完全指南:从五条性质到完整插入删除实现

引言在前面的树系列中,我们学习了二叉搜索树(BST)和 AVL 树。AVL 树通过严格的平衡条件(|BF| ≤ 1)保证 O(log n) 的性能,但代价是删除操作可能触发 O(log n) 次旋转。红黑树(Red-Black Tree&am…...

10个sd-webui-regional-prompter实用技巧:从基础分割到高级2D区域配置

10个sd-webui-regional-prompter实用技巧:从基础分割到高级2D区域配置 【免费下载链接】sd-webui-regional-prompter set prompt to divided region 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-regional-prompter sd-webui-regional-prompter是一…...

混合专家MoE拆解:GPT-4、千问、DeepSeek为什么都选这个架构

去年我写了个小模型做文本分类,全部参数只有1.5B,单卡就能跑。结果效果还行,但跟大模型比就是被吊打。 我就想,为什么那些几百B甚至上T参数的大模型,推理速度没比我的小模型慢一万倍? 答案就在MoE&#x…...

创业公司如何利用 Taotoken 统一管理多个 AI 模型服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业公司如何利用 Taotoken 统一管理多个 AI 模型服务 对于资源有限的创业团队而言,快速验证产品想法、迭代功能是生存…...

WireUI颜色选择器和日期选择器:提升用户体验的利器 [特殊字符][特殊字符]

WireUI颜色选择器和日期选择器:提升用户体验的利器 🎨📅 【免费下载链接】wireui TallStack UI components 项目地址: https://gitcode.com/gh_mirrors/wi/wireui WireUI颜色选择器和日期选择器是Laravel Livewire应用中提升用户体验的…...

为内部知识问答系统构建基于多模型聚合的智能回复引擎

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部知识问答系统构建基于多模型聚合的智能回复引擎 在构建面向企业内部的智能知识问答系统时,一个核心挑战是如何在…...

互联网大厂 Java 求职面试实战:音视频场景中的技术挑战

互联网大厂 Java 求职面试实战:音视频场景中的技术挑战在这个互联网飞速发展的时代,越来越多的求职者走进了大厂的面试现场。今天,我们将跟随一位搞笑的程序员燕双非,来看看他在面试中的表现,以及他如何应对各种技术问…...

Rufus技术演进:从Windows 7告别到现代USB启动盘工具的重构之路

Rufus技术演进:从Windows 7告别到现代USB启动盘工具的重构之路 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 在开源工具生态中,技术栈的更新换代往往伴随着兼容性的艰难…...

【收藏干货】2026年AI Coding全面爆发!程序员终极职业升级攻略,告别被替代焦虑

2026年,AI编码技术迎来规模化落地爆发期,行业彻底告别“人工纯编码”的传统模式。对于所有程序员而言,当下最核心的生存与发展策略,早已不是埋头敲代码,而是从“被动写代码的执行者”全面升级为“主动驾驭AI的价值创造…...

MySQL高频面试题-02

这一篇的主题:日志双写机制、深分页瓶颈,以及死锁怎么查。上次和大家聊了 B 树和 MVCC,今天这篇我们直接上硬菜。在社招或者大厂面试中,面试官往往不满足于只问你“什么是索引”,他们更喜欢切入高并发、大数量、分布式的真实场景。…...

MySQL 高频面试题-01

在去面试之前,很多人天天背“八股文”,结果一到现场被面试官稍微一变形就问懵了。比如:“你天天说 B 树,那为什么不用 B 树?不用红黑树?它俩到底差在哪?”“既然索引能加速,那我把所…...

Structured3D完整指南:如何用3D结构化数据轻松构建智能室内场景

Structured3D完整指南:如何用3D结构化数据轻松构建智能室内场景 【免费下载链接】Structured3D [ECCV20] Structured3D: A Large Photo-realistic Dataset for Structured 3D Modeling 项目地址: https://gitcode.com/gh_mirrors/st/Structured3D 如果你正在…...

电子书转有声书完整指南:一键实现1158种语言的AI语音合成

电子书转有声书完整指南:一键实现1158种语言的AI语音合成 【免费下载链接】ebook2audiobook Generate audiobooks from e-books, voice cloning & 1158 languages! 项目地址: https://gitcode.com/GitHub_Trending/eb/ebook2audiobook 你是否曾希望将心爱…...

铜钟音乐:在信息洪流中找回纯粹听歌体验的现代Web应用

铜钟音乐:在信息洪流中找回纯粹听歌体验的现代Web应用 【免费下载链接】tonzhon-music 铜钟 Tonzhon (tonzhon.whamon.com): 干净纯粹的音乐平台 (铜钟已不再使用 tonzhon.com,现在的 tonzhon.com 不是正版的铜钟) 项目地址: https://gitcode.com/GitH…...

Solaar 4.0:解锁罗技设备的完整Linux管理体验

Solaar 4.0:解锁罗技设备的完整Linux管理体验 【免费下载链接】Solaar Linux device manager for Logitech devices 项目地址: https://gitcode.com/gh_mirrors/so/Solaar 你是否曾为管理多款罗技无线设备而烦恼?不同设备需要不同的配置工具&…...