程序员进阶攻略
胡峰
京东成都研究院技术专家
立即订阅
7529 人已学习
课程目录
已完结 65 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 程序行知:走在同样的路上,遇见自己的风景
免费
征途:启程之初 (4讲)
01 | 初心:为什么成为一名程序员?
02 | 初惑:技术方向的选择
03 | 初程:带上一份技能地图
04 | 初感:别了校园,入了江湖
修炼:程序之术 (10讲)
05 | 架构与实现:它们的连接与分界?
06 | 模式与框架:它们的关系与误区?
07 | 多维与视图:系统设计的思考维度与展现视图
08 | 代码与分类:工业级编程的代码分类与特征
09 | 粗放与精益:编程的两种思路与方式
10 | 炫技与克制:代码的两种味道与态度
11 | 三阶段进化:调试,编写与运行代码
12 | Bug的空间属性:环境依赖与过敏反应
13 | Bug的时间属性:周期特点与非规律性
14 | Bug的反复出现:重蹈覆辙与吸取教训
修行:由术入道 (24讲)
15 | 根源:计划的愿景——仰望星空
16 | 方式:计划的方法——脚踏实地
17 | 检视:计划的可行——时间与承诺
18 | 评估:计划的收获——成本与收益
19 | 障碍:从计划到坚持,再到坚持不下去的时候
20 | 执行:从坚持到持续,再到形成自己的节奏
21 | 信息:过载与有效
22 | 领域:知识与体系
23 | 转化:能力与输出
24 | 并行:工作与学习
25 | 时间:塑造基石习惯(上)——感知与测量
26 | 时间:塑造基石习惯(下)——切割与构建
27 | 试试:一种“坏”习惯
28 | 提问:从技术到人生的习惯
29 | 偏好:个人习惯的局限与反思
30 | 写作:写字如编码
31 | 画图:一图胜千言
32 | 演讲:表达的技术
33 | 定义:阶梯与级别
34 | 晋升:评定与博弈
35 | 关系:学徒与导师
36 | 核心:安全与效率——工程技术的两个核心维度
37 | 过程:规模与协作——规模化的过程方法
38 | 思维:科学与系统——两类问题的两种思维解法
徘徊:道中彷徨 (15讲)
39 | 职业倦怠:如何面对?
40 | 局部最优:如何逃离?
41 | 沟通之痛:如何改变?
42 | 技术停滞:如何更新?
43 | 无法实现:困扰与反思
44 | 完成作品:理想与现实
45 | 代码评审:寄望与哀伤
46 | 人到中年:失业与恐惧
47 | 该不该去创业公司?
48 | 该不该接外包?
49 | 技术干货那么多,如何选?
50 | 技术分歧,如何决策?
51 | 技术债务,有意或无意的选择?
52 | 选择从众,还是唯一?
53 | 选择工作,还是生活?
寻路:路在何方 (7讲)
54 | 侠客行:一技压身,天下行走
55 | 江湖路:刀剑相接,战场升级
56 | 御剑流:一击必杀,万剑归心
57 | 三维度:专业、展现与连接
58 | 三人行:前辈、平辈与后辈
59 | 三角色:程序员、技术主管与架构师
60 | 三视角:定位、自省与多维
蜕变:破茧成蝶 (3讲)
61 | 工作之余,专业之外
62 | 跨越断层,突破边界
63 | 成长蓝图,进化跃迁
结束语 (1讲)
尾声 | 始于知,终于行
程序员进阶攻略
登录|注册

06 | 模式与框架:它们的关系与误区?

胡峰 2018-08-15
在学习程序设计的路上,你一定会碰到“设计模式”,它或者给你启发,或者让你疑惑,并且你还会发现在不同的阶段遇到它,感受是不同的。而“开发框架”呢?似乎已是现在写程序的必备品。那么框架和模式又有何不同?它们有什么关系?在程序设计中又各自扮演什么角色呢?

设计模式

设计模式,最早源自 GoF 那本已成经典的《设计模式:可复用面向对象软件的基础》一书。该书自诞生以来,在程序设计领域已被捧为“圣经”。
软件设计模式也是参考了建筑学领域的经验,早在建筑大师克里斯托弗·亚历山大(Christopher Alexander)的著作《建筑的永恒之道》中,已给出了关于“模式”的定义:
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。
而《设计模式》一书借鉴了建筑领域的定义和形式,原书中是这么说的:
本书中涉及的设计模式并不描述新的或未经证实的设计,我们只收录那些在不同系统中多次使用过的成功设计;尽管这些设计不包括新的思路,但我们用一种新的、便于理解的方式将其展现给读者。
虽然该书采用了清晰且分门别类的方式讲述各种设计模式,但我相信很多新入门的程序员在看完该书后还是会像我当年一样有困扰,无法真正理解也不知道这东西到底有啥用。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员进阶攻略》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(26)

  • third
    心得如下:

    1.模式和框架都是前人总结之下的经验

    模式是代码层面,解决单个问题的成功方法

    框架是设计层面,解决一系列问题的成功方法

    挺感谢前人的奋进的



    2.我们一边在使用工具,获得便捷,一边在被工具所驯化,讨厌麻烦,变得简单。比如重新理解框架原理。

    作者回复: 总结的好棒👍😄

    2018-08-15
    15
  • feifei
    现在还记得第一次看设计模式的那个场景,完全懵逼,然后看解决的问题,是如此的优雅!责任链,将接口容器化,链式调用,将业务逻辑的扩展变得轻松,然后我花了2周将代码做到能,不看源码,手打出来,然后慢慢的在花了2周终于理解了!老大推荐了一本《head first 设计模式》,当我看完这本书后,感觉豁然开朗,抽象的思维就开始在脑袋里慢慢形成!
    2018-08-16
    5
  • who am i
    作者使用类比和排比的手法,让我们更清楚框架,模式的联系和区别。希望后面的文章也能这样,会让我们更能理解明白。

    作者回复: 恩,会的😊

    2018-08-19
    3
  • godtrue
    我的理解:

    框架-是非业务代码功能的复用
    模式-是经验优秀开发方式的复用

    一个牛逼的框架,一定会使用一些牛逼的设计模式。框架,是牛人编写出来具体解决一类问题的半成品(相对于使用者),使用者主要的工作是按照框架的结构,填充自己业务代码。
    设计模式是解决一类特定问题的最佳实践经验,类似内功,怎么用什么时候什么地方用用什么是使用者根据需要和积累选择的。

    比喻一下:
    框架有点类似游泳圈
    模式有点类似潜水时该怎么办或仰泳时候该怎么办的最佳经验。

    作者回复: 感觉还是我最后的比喻更贴切些,哈哈😄

    2018-08-16
    3
  • Franklin.du
    看过好几遍设计模式的书,开发中能想到一些相关的设计模式,用起来就是“菜谱”的感觉。编程实践还是不够多,达不到融会贯通的地步。看来有了秘笈“降龙十八掌”也不是那么容易练成的。

    作者回复: 编程,是实践的艺术啊

    2018-08-15
    3
  • HellloWorld
    胡峰老师您好!1.我之前看过《大话设计模式》等设计模式的书籍,上面的demo也实践了,但是在实践中似乎从来没应用过,请问具体实践中应该应用什么方法去学习设计模式?如何才能真正做到掌握并且应用设计模式?2.Java相关的框架实在太多,自己在项目开发中用了很多框架,很多问题基本百度能解决,但是自己还是停留在会用的阶段,具体原理还是不懂,请问有必要去研究框架原理吗?学习框架达到什么样的水准才算可以呢?

    作者回复: 框架会用只是第一步,原理一定要明白,不懂就要去看文档和代码,框架搞透了,设计模式的应用自然就明了了。框架的实现中大量应用了设计模式

    2018-10-09
    2
  • L.
    小公司还没有属于自己的开放框架,怎么能搭建一个开发框架呢

    作者回复: 开源的吧,基本能满足,遇到不满足的情况再扩展

    2018-08-15
    2
  • June Yuan
    相比编程而言,感觉设计模式和框架的学习是比较有门槛的,理解它们的前提,是要理解它们所解决的问题。曾经学习设计模式,看看书还能一知半解,但是像 IoC、AOP, 当时在没有任何 WEB 项目经验的情况下,看了一些博客文章试图简单了解,结果依然一头雾水。实际工作以后,在真实的项目和业务需求里泡得多了,有的原先云里雾里的东西才逐渐变得自然。

    作者回复: 是这样的,实践和理论要交叉进行,反复几次可能就豁然开朗了

    2018-08-15
    2
  • 盗马将
    感觉除了一些公共的模块可以抽象,和模式华。像框架都是针对一个大面积的需求去使用各种模式开发一套灵活的框架,但是在业务代码中将代码模式话可行性高吗?因为他们的共性太少了,不同的甲方不同的应用场景,都会导致共性降低,抽象相对比较困难。但是从另一方面而言一个行业下的规则和流程基本是统一的,所以我感觉针对各个行业都有自己可以抽象和模式华的空间。然而在实际开发和设计的时候,觉得抽象华和模式华完全无从下手?还望老师给点建议。

    作者回复: 现在火的中台概念,就是行业业务规则的抽象和平台化

    2019-09-08
    1
  • 陈越
    老师,谁是我们的雅典娜啊?😄

    作者回复: 😄,在你心里,你为此而努力战斗

    2019-07-10
    1
  • 小董
    在看设计模式那块的时候,也是似懂半懂的。实战中运用了,才明白设计模式的意义存在。我想问胡老师下有什么更好的方式去更深层次的理解它吗?有时候觉得,可能还是没有达到那个境界。希望能指导点拨下……

    作者回复: 有时就是代码量和时间经验够了,突然就明白,抽象的东西总是突然就顿悟了

    2018-10-23
    1
  • HellloWorld
    峰哥,工作中用到了Struts2,Springmvc,Spring,mybatis,hibernate。如果看源码搞懂原理,您建议从哪个框架着手更容易一些?这些框架都需要搞明白原理看懂源码吗?

    作者回复: 搞懂原理不一定都要看源码吧,先从文档开始,想想如果框架提供的这个功能我会怎么实现,想不出来,就去看它怎么实现的

    2018-10-09
    1
  • 云学
    设计模式这段有同感,刚开始硬着头皮学根本消化不良,若干年后自然而然就领悟了,所以我坚持〃以术悟道〃而不是〃以道生术〃

    作者回复: 其实并不矛盾,我觉得

    2018-08-21
    1
  • 夜海
    小宇宙,圣衣,流星拳的比喻很形象。立马就理解了

    作者回复: 😄

    2018-08-17
    1
  • Jiantao
    模式学习:反复实践,理解思想!框架:解决问题的高效工具。⛽️💪
    2018-08-16
    1
  • 董某越
    是否推荐深入研究某个框架的组成和应用? 某种语言的框架又是否大同小异。 感觉工作中每种语言所搭建的系统都倾向于使用一种框架,这是否是是一种提高代码阅读性的趋势呢?

    作者回复: 推荐深入研究一次,以后可能就触类旁通了

    2018-08-15
    1
  • Sawyer
    关于设计模式的使用中,提到一个词是“火候”。这个才是真正区分一个新手和老手的关键因素。

    作者回复: 火候感,其实挺微妙的

    2018-08-15
    1
  • 绝露
    框架是半成的产品,而设计模式只是一种针对特定问题的通用方案。产品里采纳了对应领域的一系列方案。
    2018-08-15
    1
  • 艾尔欧唯伊
    设计模式是一种编程方式或风格,框架更多是提供类库或简化一些重复性,比较复杂的通用代码。不是一个类型的定义。
    另外,一个框架依赖的jar真的很可怕,最困惑的就是不知道哪些是必要,哪些不是。。。有时候可能只要这个jar里面的一个类,就得全引入,不然编译都过不去。。。
    2018-08-15
    1
  • 忆灬星辰
    感觉模式是提供了思想的便利,框架是提供了写代码的便利
    2019-12-04
收起评论
26
返回
顶部