罗剑锋的C++实战笔记
罗剑锋
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
3724 人已学习
课程目录
已完结 30 讲
0/4登录后,你可以任选4讲全文学习。
课前导读 (2讲)
开篇词 | 把C++从“神坛”上拉下来,这次咱这么学
免费
课前准备 | 搭建实验环境
概论 (5讲)
01 | 重新认识C++:生命周期和编程范式
02 | 编码阶段能做什么:秀出好的code style
03 | 预处理阶段能做什么:宏定义和条件编译
04 | 编译阶段能做什么:属性和静态断言
05 | 面向对象编程:怎样才能写出一个“好”的类?
语言特性 (5讲)
06 | auto/decltype:为什么要有自动类型推导?
07 | const/volatile/mutable:常量/变量究竟是怎么回事?
08 | smart_ptr:智能指针到底“智能”在哪里?
09 | exception:怎样才能用好异常?
10 | lambda:函数式编程带来了什么?
标准库 (4讲)
11 | 一枝独秀的字符串:C++也能处理文本?
12 | 三分天下的容器:恰当选择,事半功倍
13 | 五花八门的算法:不要再手写for循环了
14 | 十面埋伏的并发:多线程真的很难吗?
技能进阶 (4讲)
15 | 序列化:简单通用的数据交换格式有哪些?
16 | 网络通信:我不想写原生Socket
17 | 脚本语言:搭建高性能的混合系统
18 | 性能分析:找出程序的瓶颈
总结篇 (5讲)
19 | 设计模式(上):C++与设计模式有啥关系?
20 | 设计模式(下):C++是怎么应用设计模式的?
21 | 知识串讲(上):带你开发一个书店应用
22 | 知识串讲(下):带你开发一个书店应用
期末测试 | 这些C++核心知识,你都掌握了吗?
结束语 (1讲)
结束语 | 路远,未有穷期
轻松话题 (4讲)
轻松话题(一) | 4本值得一读再读的经典好书
轻松话题(二) | 给你分享我的工作百宝箱
轻松话题(三) | 提高生活质量的App
轻松话题(四) | 真正高效的生活,是张弛有度
罗剑锋的C++实战笔记
15
15
1.0x
00:00/00:00
登录|注册

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

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

为什么要有设计模式?

虽然 C++ 支持多范式编程,但面向对象毕竟还是它的根基,而且,面向对象编程也通用于当前各种主流的编程语言。所以,学好、用好面向对象,对于学好 C++ 来说,非常有用。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《罗剑锋的C++实战笔记》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(10)

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

    作者回复: 设计模式就要多用、多思考,必须在实践中才能学到,看书看资料还是比较难领会其中的精髓的。

    但有书能够让你少走弯路,快速找到好的设计,避免摸索的成本。

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

    作者回复: 说的非常好,里面的观点我都深有同感。

    学编程,必须要学设计模式,领会它的内在思想,才能提升自己的编程功力,才能往上走。

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

    作者回复: 用宏代替字面量只是C++里的一种用法,不是特别提倡,但用起来也不错,这个完全看个人或者团队是否能够达成一致。

    比如说,用C和C++混合编程,有的接口会导出成C的形式,那么用宏就很合理了。

    关于宏带来的问题和它的恶名也都是众所皆知的了,我也是推荐尽量少用宏,用来定义常量还可以,要是写复杂的宏替换、宏函数就不是特别好了,会很影响可读性。

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

    作者回复: 严格来说,设计模式是用于面向对象的,但面向过程也可以利用抽象和封装模拟面向对象,所以设计模式也能够用在面向过程。

    而函数式编程与面向对象的差异就比较大了,所以不能应用大多数模式。

    2020-06-18
    1
  • Geek_89bbab
    DIP(依赖反转)和sprinfDg的IOC (控制反转)有什么区别?

    作者回复: dip应该包含ioc吧,用C++比较多,对Java系的不是很清楚,抱歉了。

    2020-07-03
  • 董尚斌
    为啥c++少用继承多用泛型?这个不是很理解

    作者回复: 可以参考一下第5讲,继承用多了会导致庞大复杂的类体系,不灵活,难以维护。

    C++支持多范式,使用泛型可以减少继承的使用,复用代码更加简单,是松耦合。

    这个还需要在实践中多体会,当然这个也不是绝对的,在C++里怎么用都可以,这只是我的个人推荐。

    2020-07-01
  • 蓝配鸡
    每次读老师的文字都很舒服, 就好像老师就坐在对面和你娓娓道来。 厉害👍,希望再多出些专栏

    作者回复: 设计模式比较抽象,不像C++语言那么好学,有疑问、不清楚的,可以随时留言,一起讨论。

    2020-06-22
  • 有学识的兔子
    我觉得 模板模式也可以算作遵循OCP的设计原则,这个模式在满足基本业务逻辑的同时,通过关键环节的扩展点,方便后续的扩展优化;
    设计模式的出现是应对复杂系统问题,让复杂的系统的维护不至于超出程序员的掌控,这个角度讲,软件系统规模大到一定程度,就需要借助设计模式,让系统复杂度控制某个范围,例如某个模块,某个类等等;
    大的软件开发,一开始会有架构师对软件有个基本的设计,在过程中还会引入一些设计模式,解构代码,保证软件的可读性和可维护性。

    作者回复: 说的很对,有的模式也会同时符合多个原则。

    模式的应用范围也是可大可小,架构里可以用,代码里也可以用。

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

    作者回复: 设计模式就是开发软件的经典“套路”,按照这个“套路”来搭建系统,就能够得到良好的设计。

    但“套路”用得多了,也会渐渐地发现不足,就会想突破“套路”。

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

    作者回复: 设计模式描述的是对象之间的关系,可能画出uml图来能够更好地帮助理解。

    可以在写代码的时候多想想,如果需求、环境发生了变化,我们的代码能否不改或者少改就能适应变化,这就是设计模式发挥作用的地方。

    2020-06-18
收起评论
10
返回
顶部