25 | 设计模式:每一种都是一个特定问题的解决方案

2020-07-24 郑晔
《软件设计之美》
课程介绍


讲述:郑晔

时长:大小12.02M


你好,我是郑晔!
今天,我们来聊聊设计模式。作为一个讲软件设计的专栏,不讲设计模式有些说不过去。现在的程序员,基本上在工作了一段时间之后,都会意识到学习设计模式的重要性。
因为随着工作经验的增多,大家会逐渐认识到,代码写不好会造成各种问题,而设计模式则是所有软件设计的知识中,市面上参考资料最多,最容易学习的知识。
但是,你也知道,设计模式的内容很多,多到可以单独地作为一本书或一个专栏的内容。如果我们要在这个专栏的篇幅里,细致地学习设计模式的内容就会显得有些局促。
所以,这一讲,我打算和你谈谈如何理解和学习设计模式,帮助你建立起对设计模式的一个整体认知。

设计模式:一种特定的解决方案

所谓模式,其实就是针对的就是一些普遍存在的问题给出的解决方案。模式这个说法起源于建筑领域,建筑师克里斯托佛·亚历山大曾把建筑中的一些模式汇集成册。结果却是墙里开花墙外香,模式这个说法却在软件行业流行了起来。
最早是 Kent Beck 和 Ward Cunningham 探索将模式这个想...

展开全文
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。

精选留言

  • 桃子-夏勇杰
    2020-07-31
    从为了设计而设计,到为了解决问题而设计,这几乎是成熟程序员的必由之路。学费公司出,这也是我们这个行业的必由之路😂

    作者回复: 我不得不说,你说得对😂

    共 2 条评论
    22
  • Harry
    2020-08-05
    曾经买过一本《大话设计模式》,每晚必挑灯夜读之。然而现在,心中已无模式,只有原则。

    作者回复: 恭喜上了一个台阶!

    共 3 条评论
    18
  • 阳仔
    2020-07-24
    设计模式是对一些常见问题抽象后给出的特定解决方案,很多人或多或少都听说过或使用过设计模式,比如观察者模式,工厂模式,builder模式,单例模式,策略模式等等 这些模式都遵循软件开发设计的SOLID原则,设计模式就是从这个原则推导出来,所以掌握基本的设计原则就理解了设计模式的基础,在实际编码中,不刻意使用设计模式但也可以写出某个设计模式相似的代码,我觉得这个才是“无招胜有招”的境界 当然学习设计模式也能够更好帮助反过来思考这些模式背后的基本原则
    共 1 条评论
    7
  • 奔奔奔跑
    2020-07-24
    看老师的专栏太难受了!思考的乐趣与设计的美感,每每反思自己的代码,总感觉心痒痒的,恨不得把所有相关代码都看一遍,了解各种框架,各种中间件是怎么去做的,去实践的。

    作者回复: 别控制,大胆去做!

    共 4 条评论
    4
  • Janenesome
    2020-10-24
    Template Method 这个模式用得比较多,因为只需要将不同的部分封装到子类,场景比较清晰。其他的设计模式就用得比较少。 这个专栏给出的原则挺多,准备一个一个来践行,因为一下子体会到全部有点难,得一边写代码一边对照思考,慢慢改变自己的编程思想。

    作者回复: 可以用这些原则一个一个过一遍设计模式。

    
    1
  • Keith
    2020-08-03
    设计原则对是抽象, 设计模式为具体的实现, 但又不是简单的继承, 而是通过组合等方式实现
    
    1
  • 饭
    2020-07-24
    设计模式反复看过很多次,可能和我做Bs架构的管理系统有关,只用过单例,消费者,生产者,然后是简单工厂。其他没用过

    作者回复: 还是有必要全面了解一下的。

    
    1
  • Jxin
    2020-07-24
    我觉得应该是从设计模式开始,到深入理解设计原则。反过来,很看天赋,难。 1.把设计模式抄熟,多用。学会识别设计模式要解决的问题场景。领会该设计模式在该问题场景的应用是基于什么设计原则的考量。 2. 设计模式和设计原则可类比成太极拳的拳法与神,以模仿拳法入门,以领悟神韵进阶。拳、劲、神->模式、场景、原则。那么怎么练好呢?熟而渐悟懂劲,由懂劲而阶及神明。然非用力之久不能豁然贯通焉。 歧义点: ef java那本书也有提到,单例双重检验是个失败案例。毕竟指令重排,并发线程可能拿到有内存地址的空对象,进而会存在空指针异常。
    展开
    共 1 条评论
    1
  • aoe
    2021-11-02
    怪不得老师花了很多篇幅讲设计原则,好有道理
    
    
  • 猪肉怂
    2021-06-03
    之前就曾经叹服于一些设计模式,比如工厂模式,到了动态语言中会有那么简洁的实现,简洁到甚至感觉不到模式的存在,原来设计模式只是为了通往更好设计的解决方案。当语言的本身掣肘随着发展而被祛除,设计模式也就完成了它们的使命。 当一些设计模式最终更好的开发语汇所替换掉,模式背后的设计原则,将会永远存在下去。 这就是郑老师所讲的根基与枝叶的关系吧。
    展开

    作者回复: 你的理解很到位

    
    
  • 佟宏元
    2020-11-21
    平时使用过单例,策略,观察者等模式,从一开始纠结于如何按照规定编写代码,到后面已经脱离了编码层面的使用,我总结出,学习设计模式,学习的不是如何编写代码,而是一种软件设计思想,比如什么场景使用策略模式,什么场景使用观察者模式,甚至是已经完全不体现在代码层面,而是对系统的功能的设计,对业务场景的梳理。所以我觉得设计模式最后的样子,是一种解决业务,设计软件的模型。

    作者回复: 于是,你就升华了。

    
    
  • 木头发芽
    2020-10-10
    跟独孤九剑一个道理,剑式就那么九个,怎么解决敌人就看具体是什么问题,在这九式的指导下见招拆招就可以

    作者回复: 是的,理解得越深入,运用得越纯熟。

    
    
  • escray
    2020-09-27
    那个《面向模式的软件架构》实在是太狠了,居然有 5 卷,并且还得了 Jolt 大奖。 这篇专栏可以作为学习设计模式的一个开篇词。 之前也学习过 23 中设计模式,但是在写程序的时候其实用的并不多,时间长了,连 23 个模式的名字都记不全。 有时候按照 SOLID 原则去重构一些代码,总感觉好像是对应了某一个设计模式,但是又似是而非,需要到隔壁专栏复习一下设计模式。 “看眼看模式”部分,讲到程序设计语言的发展使得一些模式有了新的写法,我有点好奇,在业界究竟有多少公司能够跟进语言的演变。
    展开

    作者回复: 写代码很多时候,是一个人,或一个团队的事,整个行业的演变速度是非常慢的。

    
    
  • Atong
    2020-09-15
    第一阶段: 为了学设计模式而学设计模式。一段时间学代码觉得用不是很上。到后面觉得代码改动似乎很大,而且就和之前课程提到的一样,把面向对象写成了面向过程。 然后就是有意识的搬设计模式中的内容。有些场景下会使用设计模式,看着像是符合了某种设计原则。但其实自己还是处于无知的状态。 第二阶段:通过课程对设计原则有了更深刻的理解之后。更能明白设计模式的出发点及用意。就如课程所说的,设计原则是背后的东西。设计模式仅是针对某种场景的具体例子。 希望能够深刻理解到设计原则,自己能够基于场景推导设计模式,或是基于模式及原则推导可能适用的场景。 做到“心法” 和 “招式”的对应,并且能够灵活运用。甚至是在找不到合适“招式”的时候,也能够自己推演出来。
    展开
    
    
  • 苗
    2020-09-02
    感觉悟了;如果没有理解分离关注点和dip;很可能就在业务处理流程中直接调用 UserCollectorChannel的send方法了;都不会想到抽象出usersend接口。

    作者回复: 有收获就没白学

    
    