罗剑锋的 C++ 实战笔记
罗剑锋
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
34779 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 32 讲
结束语 (1讲)
罗剑锋的 C++ 实战笔记
15
15
1.0x
00:00/00:00
登录|注册

19 | 设计模式(上):C++与设计模式有啥关系?

你好,我是 Chrono。
今天,我们进入最后的“总结”单元,把前面学到的这些知识上升到“理论结合实践”的高度,做个归纳整理。我们先来了解一下设计模式和设计原则,然后再把理论“落地”,综合利用所有知识点,设计并开发出一个实际的服务器应用。
你可能会问了:我们这是个 C++ 的课程,为什么还要专门来讲设计模式呢?
我觉得,设计模式是一门通用的技术,是指导软件开发的“金科玉律”,它不仅渗透进了 C++ 语言和库的设计(当然也包括其他编程语言),而且也是成为高效 C++ 程序员必不可缺的“心法”和“武器”。
掌握了它们,理解了语言特性、库和工具后面的设计思想,你就可以做到“知其然,更知其所以然”,然后以好的用法为榜样,以坏的用法为警示,扬长避短,从而更好地运用 C++。
所以,我把我这些年的实践经验进行了提炼和总结,糅合成了两节课,帮你快速掌握,并且用好设计模式,写出高效、易维护的代码。这节课,我会先讲一讲学好设计模式的核心方法,下节课,我们再讲在 C++ 里具体应用了哪些设计模式。

为什么要有设计模式?

虽然 C++ 支持多范式编程,但面向对象毕竟还是它的根基,而且,面向对象编程也通用于当前各种主流的编程语言。所以,学好、用好面向对象,对于学好 C++ 来说,非常有用。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《罗剑锋的 C++ 实战笔记》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • eletarior
    编程语言只是外家功夫,练得再好也像在使蛮力,设计模式才是内功心法,算是可以让编程能力从coding到programming的良方;但是用好设计模式真的不容易,很多人告诉我用的最熟的设计模式是单例模式,这让我哭笑不得,并不是看不上单例,实在是因为单例模式并不能很好的体验设计模式的精髓。个人理解的设计模式是能脱离了代码实际,向更高维度的项目工程化进阶的利器,让我们可以更好的组织和维护代码,迭代需求。但是在国内总觉得大环境比较缺失。 和设计对应的是过度设计,这个老师也有提到了kiss 和 dry原则。另外我想补充一下YAGNI(YOU AREN'T GONNA NEED IT)原则,这虽然是极限开发里的原则,但是设计上也是适用的,不要设计或者编写现在还没有用上的代码或者功能,你可能永远用不上它,这对习惯了yp(复制 粘贴)的程序员来说是个噩梦,因为他们可能连注释都会贴上去交差,遑论“多余”的代码了。 最后很感叹老师的行文取舍,没有去大书特书具体的设计模式,而是重点强调那几个原则,具体的设计模式必然是遵循这些原则的。把具体的设计模式区分的太好,也容易陷入强行搭架子的误区,只有真正理解了设计的原则,能让你放下模式化的执念,回归设计的本质,就像是太极一样,形散而意不散。

    作者回复: 说的非常好,里面的观点我都深有同感。 学编程,必须要学设计模式,领会它的内在思想,才能提升自己的编程功力,才能往上走。

    2
    30
  • 董尚斌
    为啥c++少用继承多用泛型?这个不是很理解

    作者回复: 可以参考一下第5讲,继承用多了会导致庞大复杂的类体系,不灵活,难以维护。 C++支持多范式,使用泛型可以减少继承的使用,复用代码更加简单,是松耦合。 这个还需要在实践中多体会,当然这个也不是绝对的,在C++里怎么用都可以,这只是我的个人推荐。

    5
  • Confidant.
    设计模式感觉非常的玄,第一次觉得自己稍微理解了一些设计模式的皮毛的时候,是对编译链接的内容有了一些体会,发现使用设计模式,可以在编译代码的时候,只编译增量的部分,从而达到修改原来功能的效果,大概体会到设计模式中对于应对变化的一些实际效果,不过实际写代码的过程中,倒是还没有到能随时把设计模式或者这些设计思想应用到自己的代码中的功底。

    作者回复: 设计模式描述的是对象之间的关系,可能画出uml图来能够更好地帮助理解。 可以在写代码的时候多想想,如果需求、环境发生了变化,我们的代码能否不改或者少改就能适应变化,这就是设计模式发挥作用的地方。

    5
  • EncodedStar
    设计模式是程序员的内功,学会设计模式并在实战中用到,会让你的程序变的很灵活,有种未雨绸缪的感觉。 设计模式都是前人实战留下的经典,好比三十六计一样,智者才能巧用啊。

    作者回复: 设计模式就要多用、多思考,必须在实践中才能学到,看书看资料还是比较难领会其中的精髓的。 但有书能够让你少走弯路,快速找到好的设计,避免摸索的成本。

    3
  • Weining Cao
    老师设计模式总结得很好。只是有一点我觉得有点疑惑:用宏代替字面量 真的是一个好的实践吗? 另外我理解宏定义能够减少代码量,但它也带来很不好的问题是它基本没法调试。 不知道老师有没有推荐的方法或者工具能够帮助调试C++的宏或者自动展开C++的宏变成清晰易于理解的源码?

    作者回复: 用宏代替字面量只是C++里的一种用法,不是特别提倡,但用起来也不错,这个完全看个人或者团队是否能够达成一致。 比如说,用C和C++混合编程,有的接口会导出成C的形式,那么用宏就很合理了。 关于宏带来的问题和它的恶名也都是众所皆知的了,我也是推荐尽量少用宏,用来定义常量还可以,要是写复杂的宏替换、宏函数就不是特别好了,会很影响可读性。

    3
  • 九三
    设计模式是作用在 编程范式如 函数式 面向对象 面向过程等这些范式上吗

    作者回复: 严格来说,设计模式是用于面向对象的,但面向过程也可以利用抽象和封装模拟面向对象,所以设计模式也能够用在面向过程。 而函数式编程与面向对象的差异就比较大了,所以不能应用大多数模式。

    3
  • 木鱼
    SRP: 保持功能单一,代码易写,易测 OCP:建议使用组合的方式来支持扩展,而不是继承(能组合就组合) LSP:子类需要拥有父类所有特性 ISP: 依赖接口而非实现 DIP: don't call me, i will call you(IOC是dip的一种实现), 最终强调的其实是对象间的依赖关系调整, 从原有的直接关联, 变为中间依赖, 进而方便替换

    作者回复: great

    2
  • 黄骏
    设计模式,在考高级架构师时有涉及,后面的工作中也遇到一些,比如,单例,访问者,观察者等,设计模式有点类似写作文,比如,议论文的三段法等。确实能避免很多问题

    作者回复: 设计模式就是开发软件的经典“套路”,按照这个“套路”来搭建系统,就能够得到良好的设计。 但“套路”用得多了,也会渐渐地发现不足,就会想突破“套路”。

    1
  • 甘康艺
    设计模式不仅仅适用于计算机编程,感觉这门课程的设计起码用到了“DRY”和“KISS”

    作者回复: thanks a lot。

    归属地:北京
  • 木鱼
    solid

    作者回复: great

收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部