《GeekBand》C++设计模式01
来源:互联网 发布:靠谱的留学中介 知乎 编辑:程序博客网 时间:2024/06/07 16:27
设计模式其实自己有自学过一次,大学时候也有专门的课程,提到某种模式的时候,知道是怎么一回事,但是当自己设计时候很难用的上,总觉得get不到要领。
李建忠老师这个课,真是为我打开了新世界的大门!我觉得李老师这个讲课思路才是最实用的,从一个具体的例子然后根据需求去慢慢扩展,这种“解题”过程,对听课的人的思维训练的提示,经验的积攒是很宝贵的。
以往自己对设计模式的认知就是认为是一种死的,像模板一样的,把需求套进去,ok了。这简直不知道错到哪里去了,怪不得以前不能很好的理解。其实,设计模式是一种思想,而不是一种类似算法,或者模板的东西。是一种通过面向对象思想,遵循设计原则,经过若干次迭代然后形成的一种模式。
不妨先来看一下设计原则:
1.依赖倒置原则(DIP)
高层模块(稳定)不应该依赖于底层模块(变化),二者都依赖于抽象;抽象(稳定)不应该依赖于实现细节(变化),实现细节依赖于抽象(稳定)总结起来就是,会变化的模块不应该成为被依赖方。
2.开放封闭原则(OCP)
对扩展开放,对更改封闭。意思就是尽量不要更改模块(实现),应该去对现有模块扩展。
3.单一职责原则(SRP)
一个类只应该有一个职责,而这个职责的变化是唯一能够引起类发生改变的原因
4.Liskov 替换原则(LSP)
子类必须能够替换他们的基类(IS-A);继承表达类型抽象
5.接口隔离原则(ISP)
接口应该小儿完备,并且之暴露给依赖他们的客户
6.优先使用对象组合,而不是类继承
继承在某种程度上破坏了封装性,子类与父类耦合度高。
7.封装变化点
使用封装来创建对象之间的分界层,一侧的改变不会对另一侧产生影响,实现松耦合度。这个太重要了,设计过程中划分模块,划分层次的依据其实追根到底是依据变化的!
8.针对接口编程,而不是针对实现编程
不将变量类型声明为某个特定的具体类,而是声明为某个接口。客户程序只需要知道接口就可以,而无需了解细节。
我觉得对这些原则的理解的重要性要远远高于对具体模式的理解。接下来再写具体模式的定义我觉得毫无意义,铺开篇章来写,我不认为我能举出比课中更加恰当的例子,其次篇幅时间也有限。
我认为这门课是需要一定量的代码和项目经验的,有时候老师提出的问题,我就完全没有处理这个问题的经验,当老师提出解决方案时候,就很难发生思维的碰撞或者共鸣,没有这些东西,就很难让我有更深入的思考,很快就会忘记。这种没有架空了的学习,效率不能再低。
学习最好的模式莫过于,遇到问题,碰壁,自己想办法解决,碰壁,……,最后被点醒,解决问题。
以上。
- 《GeekBand》C++设计模式01
- 《GeekBand》C++设计模式02
- GeekBand C++ 设计模式 第一周笔记
- GeekBand C++ 设计模式 第二周笔记
- GeekBand笔记-《C++设计模式》第一周
- GeekBand笔记-《C++设计模式》第二周
- GeekBand笔记-《C++设计模式》 第三周
- 《GeekBand》系统设计与实践01
- geekband android #5 第十四周分享(设计模式)
- Geekband 设计模式 第一周笔记 暗影行者
- GeekBand C++ C++设计模式 第八周笔记
- GeekBand C++ C++设计模式 第九周笔记
- GeekBand C++STL第二周笔记
- 设计模式----工厂模式(c++)
- 【设计模式C++】工厂模式
- C++/设计模式
- 设计模式[C++]
- C和设计模式
- 读书笔记之应用程序与操作系统之间的关系——《操作系统之真相还原》
- Transition动画框架
- 53. Maximum Subarray
- Java测验 统计字符串中每个“单词”的个数
- 线的绘制
- 《GeekBand》C++设计模式01
- linux学习-启动篇
- 读编写高质量代码--改善java程序的151个建议笔记
- Programming In Scala笔记-第四章、类和对象
- 关于数组溢出的思考
- 3.2 对象已死?
- 数据结构----BFS和DFS详解
- 图像检索
- Activity之间传递参数