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

设计心得——多态

一、设计上的多态

无论是在网上还是书籍上,还是自己的文章里都反复分析过多态的原理、应用和各种常见的情况。本篇重点从设计的角度来阐述一下多态,而不对多态的具体的用法进行说明。在前面的知识学习中可以知道,多态可以分为动多态和靜多态,有很多种实现的方式。而这种实现方式的不同,其实恰恰是给设计者提供了一种设计上的思路。

二、多态在设计上的展开

1、普通多态 (动多态 )
无论是在常见的学习中的多态的用法还是普通模板中的多态的用法,它们其实都是可以归为动多态这一类。动多态有虚表,有虚指针,需要迟后联编。它的应用上更灵活,也更容易为开发者理解。一般开发者接触到继承后,就可以对这种多态进行学习和应用了。
2、特殊多态(静多态 )
多态其实还有一些特殊情况,一个是通过模板或宏来模拟实现多态(注意区别普通多态中的模板中的多态应用)。另外一个就是前面提到CRTP的多态的应用。它们这一类基本上可以归到静多态这一类上。因为它不同于初学者学到的多态的情况,所以也称为特殊多态。这一类多态其实从严格意义上来讲只是实现了多态的效果。

掌握多态的实现和原理需要开发者自己认真的学习相关的技术,而设计者更多的考虑是如何将多态的场景更好的结合到技术实现中。举一个不太恰当的例子,开发者是要做千里马,而设计者是要做伯乐。

三、动多态和静多态在设计上的展开

开发者最初接触多态基本都是从动多态开始,即使用虚拟函数来处理父子类的不同的行为。但这种多态的缺点也因此暴露出来,即效率和延期绑定。而在某些情况下,设计者可能既需要多态行为又想避免上述的缺点,或者想在编译期确定一些行为,那么就可以使用静多态来实现。无非是牺牲了一点编译时间增加了一点复杂度而已。特别是本身就大量使用了宏或模板的项目来说,在需要使用静多态时,可能会更有优势。
这再次印证了经常提到的,没有最好的,只有最合适的。一个优秀的设计者,一定是根据项目的实际情况来确定应用哪项技术。而实际情况千差万别,同一个设计者,同一家公司,同一个需求,但不同样的开发团队,可能就有所不同。正如兵法说的“兵无常势,水无常形”。
动多态与静多态不是互斥的,它们是可以综合应用、共同在一个项目中解决问题的。但因为模板编程本身或宏编程本身就具有一定的复杂性和难度,所以很多初学者甚至中级开发人员应用起来都较为吃力,所以设计者一定考虑到这个问题。这也是为什么静多态不如动多态在实际的项目中看到的多的原因。
扬长避短不单纯是指扬某个技术的长和短,还指开发人员开发水平的长和短以及其它类似的长短,这是开发人员与设计人员考虑问题的不同所在。

四、多态体现的设计原则和方法

多态能在面向对象编程中三分天下有其一,是有原因的。它其实可以广泛的实践一些设计原则和方法:
1、开闭原则
对父类封闭,对子类开放。这样就可以更好的解决代码的扩展问题。
2、接口隔离原则
可以使用纯虚类实现接口,来达到更好的灵活性和扩展性。
3、代码重用
这个一看就明白,父类直接可以为子类可用,就看重用的程度有多大罢了。
4、设计模式的应用
在设计模式中,象抽象工厂模式等,都可以广泛的应用到多态的设计。

五、总结

勿在浮砂筑高台。只有掌握技术本身,才能更好的在设计上展开应用。换句话说,一个优秀的设计者本身必须是一个优秀的开发者。这也是前一段时间网上经常说的所谓“PPT架构师”的味道。知其然并知其所以然,顺势而为,才可能有一个优秀的设计出来。

相关文章:

  • 沐数科技数据开发岗笔试题2025
  • Unity开发中对象池设计与使用
  • Ansible 自动化运维
  • Docker容器命令速查表
  • Leetcode 刷题笔记1 动态规划part11
  • ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值
  • Linux系统之less命令的基本使用
  • 【HTML】三、表单与布局标签
  • Linux磁盘与存储管理:从“空间不足”到“存储大亨”
  • C 语言实现彩票模拟:指针与数组的巧妙运用
  • SonarQube安装及结合IDEA使用详细教程(2025适配版)
  • 前端高级CSS用法
  • Blender-MCP服务源码3-插件开发
  • 路局的上道检修过程中,利用AI视觉技术对轨道两旁设备设施进行检修
  • 【2025最新】深度学习框架PyTorch——从入门到精通(1)下载与安装
  • 面试系列|蚂蚁金服技术面【1】
  • 动手学深度学习:CNN和LeNet
  • ctf-web:php反序列化逃逸 -- GHCTF Escape!
  • Linux和RTOS简析
  • vulnhub靶场之stapler靶机
  • 诗词文赋俱当歌,听一听古诗词中的音乐性
  • 观察|英国航母再次部署印太,“高桅行动”也是“高危行动”
  • 李公明|一周画记:哈佛打响第一枪
  • 一张老照片里蕴含的上海文脉
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 子公司神州信息十年来首次亏损,神州控股遭国有股东广州城投派驻董事问责