最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:3

【文档】如何学习设计模式?

 attach_img

6

帖子

8

回复

10

积分
最后登录:
2025-04-06 18:50
注册时间:
2023-04-21 19:21
楼主
  发表于:2025-04-06 21:53:23|查看用户信息

如何学习设计模式?

感觉设计模式是看着简单 ,但是一用就不会,23种设计模式,学的人头大


4

帖子

5

回复

9

积分
最后登录:
2025-04-06 18:17
注册时间:
2023-08-30 21:07
1 楼
  发表于:2025-04-06 21:57:12|查看用户信息

设计模式是中级程序员向高级程序员过渡的关键,跨不过这道坎,无论有多少经验,你都不会真正体会到编程之美。


那么什么是设计模式?简单的说就是套路,招数,和搏击中的套路和招数是一个意思。


我们学习一门语言(例如java),基本语法类似于搏击中的基本功(类似直拳、勾拳、侧踢),而设计模式则类似于组合技。


搏击中的组合技适合不同的场景,例如倒地的时候,如果对手的关节处于合适的位置,专业的格斗家会选择一个“十字绞”来完成一次绝杀。


这个“十字绞”在搏击中被称为套路,如果用科学的语言说,这就是一个模式,可被称为“搏击模式”。


而所谓的“搏击模式”就是无数的搏击家,在搏击实践中,总结出的,应对特殊场景下“最佳”搏击实践。


类似的,中国象棋中也有很多模式,例如“马后炮”、“连环马”等。


而《孙子兵法》、《三十六计》就讲解“战争模式”的书。


而设计模式,直白的说就是编程中的模式,它是过去的优秀程序员总结出的,面对特定编程问题的特殊“招式”,最佳实践。


在搏击学习中,教练如何向运动员传授招式(模式)呢?有3个关键点:

1、招式的名字

2、步骤

3、触发的场景

三者缺一不可。


一个言简意赅的名字必不可少,它是搏击沟通的语言,不仅在运动员和教练之间,同时也在体育解说和观众之间。例如,当运动员在场内比赛的时候,条件合适,教练只需要再外边喊一句“十字绞”,运动员马上就知道该怎么做。


编程也如此,我们也必须给常见的编程招式起一个响亮的名字,例如“观察者模式”,“单例模式”等等。这样,在程序员之间沟通的时候,对一个具体的问题,你就可以说:我认为这里应该使用“单例模式”,对方马上就明白你想表达的意思。


而设计模式的步骤也和搏击招式一样,例如“十字绞”要先扣住对方的手,然后方向扳动对方的关节…编程中的“观察者”模式也要先设计观察者接口,然后再提供注册方法…


模式的触发条件,搏击和编程也类似,“十字绞”触发的条件是在地面战中,对方的手被控制住,且无法挣脱…,而“观察者模式”触发的条件包括“我知道你,但你不需知道我”,“不要来找我,我会去找你”…


既然格斗的招式和编程的设计模式如此类似,同样,学习方法也是高度类似,那就是:先记住(背会)招式,然后大胆去使用,在实战中找感觉,渐入化境。除此之外,再无他法。


其中,最难的不是具体模式的步骤,而是触发条件。新人最大的问题不是不会实现设计模式,恰恰相反,而是“滥用”设计模式,也就是所谓的“过度设计”。


但没有办法,学习设计模式这是必经的过程:“从少到多,再从多到少”。这个过程是玄妙的,也是朴实的,也是编程最有魅力,最能体现编程哲学的地方。


学习设计模式很像王国维讨论治学时的三重境界:

第一重境界:独上高楼,望尽天涯路。

第二重境界:为伊消得人憔悴,衣带渐宽终不悔。

第三重境界:众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。


2

帖子

6

回复

7

积分
最后登录:
2025-04-06 19:49
注册时间:
2023-03-12 16:36
2 楼
  发表于:2025-04-06 22:05:02|查看用户信息

我之前刷过一遍设计模式,很枯燥,但是也刷完了,因为用不到,所以慢慢就忘记了。


直到有一天遇到一个数据流特别复杂的问题,用传统思想写出来的代码很难维护,然后突然想起了似乎很适合解决这种问题。所以又翻看了一下观察者的思想,豁然开朗,用观察者+重构了一下,代码清晰很多,这个过程中也让我对这两个设计模式有了深刻的理解。


凡此种种,经历了这么多之后,我有一些建议:每种设计模式都有其特定的问题背景,我们不应该只盯着设计模式本身看,而应该看它解决了什么问题。所以学习设计模式的最好方式是遇见这些问题,然后按照设计模式所提供的思想去解决这些问题。


要是只是为了学而学的话,就会成为屠龙之技。


4

帖子

5

回复

8

积分
最后登录:
2025-04-06 21:32
注册时间:
2023-03-11 17:03
3 楼
  发表于:2025-04-06 22:13:27|查看用户信息

设计模式就像是编程界的招式、套路一样,你在开发的过程中遇到的大多数问题都有对应的招式帮你解决。

比如一个系统有几种角色,工厂模式可以帮你实例化;给对象添加新功能,装饰模式帮你搞定;对象太大,想要提高响应速度,可以考虑用代理模式。

这样我们写起代码来就会轻松许多,将来别人来维护你的代码也会更容易一些。

基于这个原因,学好设计模式对程序员也就非常重要了,可以说是面试官必问的知识点之一。


那么怎么学好设计模式呢?

记得我们老师说过一句话,他说:“作为一个新手,找一本该方向的书看完,问题差不多就解决了90%。”

所以给大家推荐一本设计模式比较经典的书,《Head First 设计模式(中文版)》,豆瓣评分9.2分。

2.jpg


据我所知,不少高校用的教材就是这本书,这本书里,通过一些例子,让你快速带入到常见的设计问题,然后循序渐进的提出解决方案,提出对应的设计模式和设计原则,阅读难度低,而且理解起来很容易,非常推荐阅读。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录