讲师中心 微信公众号
AI工具推荐 视频效率加速

多态在设计模式之简单工厂与模板方法中的体现

雨萱姑娘_3504

雨萱姑娘_3504

发布时间:2026-04-10 15:21:18

|

482人浏览过

|

来源于php中文网

原创

多态是面向对象编程的核心特性,支撑简单工厂(创建阶段)和模板方法(执行阶段)实现解耦与扩展:前者通过抽象类型返回实例,后者借抽象/钩子方法动态绑定子类逻辑,二者常结合使用。

多态在设计模式之简单工厂与模板方法中的体现

多态是面向对象编程的核心特性之一,它让同一接口可以有多种实现,在设计模式中起到“解耦”和“可扩展”的关键作用。简单工厂和模板方法模式虽目的不同,但都依赖多态来实现行为的灵活替换与统一调度。

简单工厂中的多态:通过父类/接口引用屏蔽具体实现

简单工厂本身不是 GoF 23 种设计模式之一,但它常作为创建对象的入口,其价值正体现在对多态的运用上。

  • 工厂方法返回的是抽象类型(如接口或基类),而非具体子类实例;调用方只依赖这个抽象类型操作对象,不关心实际是哪个子类。
  • 新增产品类时,只需添加新子类 + 在工厂内部增加分支逻辑,原有使用方代码完全不用修改——这正是多态支撑的“开闭原则”体现。
  • 例如定义 Shape 接口,有 Circle、Rectangle 实现;工厂根据参数返回对应实例,使用者调用 draw() 时,JVM/CLR 自动绑定到实际类型的实现,这就是运行时多态。

模板方法中的多态:钩子方法与抽象方法驱动子类差异化实现

模板方法模式定义一个算法骨架,将某些步骤延迟到子类中实现。它的多态性主要体现在“抽象方法”和“钩子方法”的动态分派上。

  • 模板方法(通常是 final)在父类中编写流程,其中调用的 abstract 方法或可重写的 hook 方法,实际执行的是子类提供的版本。
  • 客户端仅持有父类引用,调用模板方法即可触发一整套由子类定制的行为组合——算法结构不变,细节由多态动态填充。
  • 比如 AbstractGame 定义 play() 模板:初始化 → 开始 → 运行 → 结束;其中 start() 和 end() 是 abstract 方法,onPause() 是 hook,默认空实现;各游戏子类按需重写,运行时自动调用对应实现。

两者的多态侧重点不同但协同性强

简单工厂侧重“对象创建阶段”的多态,解决“生成谁”的问题;模板方法侧重“行为执行阶段”的多态,解决“怎么运行”的问题。二者常结合使用:

  • 用简单工厂生产某个模板方法的子类实例;
  • 客户端拿到父类引用后,直接调用模板方法,内部自动激活子类的具体逻辑;
  • 这样既隐藏了对象创建细节,又统一了执行流程,还支持无限扩展新策略——多态贯穿始终。

不复杂但容易忽略:没有多态,简单工厂只能返回具体类型导致调用方紧耦合;没有多态,模板方法就退化为一堆重复代码,失去复用意义。真正让模式“活起来”的,正是多态带来的动态绑定能力。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

5535

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

302

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

304

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

203

2026.04.17

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3068

2023.10.19

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn