《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.针对接口编程,而不是针对实现编程

不将变量类型声明为某个特定的具体类,而是声明为某个接口。客户程序只需要知道接口就可以,而无需了解细节。


我觉得对这些原则的理解的重要性要远远高于对具体模式的理解。接下来再写具体模式的定义我觉得毫无意义,铺开篇章来写,我不认为我能举出比课中更加恰当的例子,其次篇幅时间也有限。

我认为这门课是需要一定量的代码和项目经验的,有时候老师提出的问题,我就完全没有处理这个问题的经验,当老师提出解决方案时候,就很难发生思维的碰撞或者共鸣,没有这些东西,就很难让我有更深入的思考,很快就会忘记。这种没有架空了的学习,效率不能再低。

学习最好的模式莫过于,遇到问题,碰壁,自己想办法解决,碰壁,……,最后被点醒,解决问题。


以上。

0 0
原创粉丝点击