由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 王垠:解密“设计模式”
相关主题
design patterns到底有用吗?c++越写越没有信心,觉得自己水平弱的不行
设计模式要不要搞?王垠 -- 拳打南山魏老 脚踢北海好虫
快速系统学习 c++ design pattern有什么好书或者网站吗请教: 如何提高CS基础
除了model view controller (mvc)这种pattern还有什么pattern流行?$3.95的Lisp In Small Pieces
OOP"设计模式“,Java与Clojure代码对比你们这些python黑
哪里有各种设计模式的C++示例?Peter Norvig说编程竞赛强与工作干的好成反比 (转载)
请推荐C++ design方面的书设计模式作者之一John Vlissides去世
老板嫌我C++太差!请推荐。EE找CS的工作求指教
相关话题的讨论汇总
话题: pattern话题: java话题: design话题: 设计模式话题: gof
进入Programming版参与讨论
1 (共1页)
x****o
发帖数: 21566
1
来源:王垠的博客
有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
的问题,所以想在这里做一个总结。
总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
里程序的严重复杂化以及效率低下。
GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建
筑学里的“设计模式”起了名字,试图让建筑师们有一些“共同语言”。可惜的是,
Alexander 后来自己都承认,他的实验失败了。因为这些固定的模式,并没能有效地传
递精髓的知识,没能让新手成长为出色的建筑师。
照搬模式东拼西凑,而不能抓住事物的本质,没有“灵感”,其实是设计不出好东西的
。这就像照搬“模版”把作文写得再好,也成不了作家一样。
我孤陋寡闻,当听说这本书的时候,我已经学会了函数式编程,正在 Cornell 读 PhD
,专攻程序语言设计。有一天由于好奇这书为什么名气这么大,我从图书馆借了一本回
来看。我很快的发现,其实这本书的作者只是给早已经存在的编程方法起了一些新的名
字而已。当时我就拿起一张纸,把所有的20来个设计模式跟我常用的编程概念做了一个
映射。这个映射居然是“多对一”(many-to-one)的。也就是说,多个 GoF 设计模式
,居然只对应同一个我每天都用的概念。有些概念是如此的不值一提,以至于我根本不
需要一个名字来描述它,更不要说多个名字!
其中极少数值得一提的“模式”,也许是 visitor 和 interpreter。很可惜的是,只
有很少的人明白如何使用它们。所谓的 visitor,本质上就是函数式语言里的含有“模
式匹配”(pattern matching)的递归函数。在函数式语言里,这是多么轻松的事情。
可是因为 Java 没有模式匹配,所以很多需要类似功能的人就得使用 visitor pattern
。为了所谓的“通用性”,他们往往把 visitor pattern 搞出多层继承关系,让你转
几道弯也搞不清楚到底哪个 visitor 才是干实事的。
其实,函数式语言的研究者们早就知道 visitor pattern 是怎么得来的。如果你想知
道如何从无到有,一步一步“发明”出 Java 的 visitor pattern,可以参考?Dan
Friedman?跟他的学生 Matthias Felleisen 合写的的另一本“小人书”《A Little
Java, A Few Patterns》(发表于 1997 年)。
而 interpreter (解释器)模式呢?看了作者们写的例子程序之后,我发现他们其实
并不会写解释器,或者说他们不知道如何写出优雅的,正确的解释器。如果你想知道如
何写出好的解释器,可以参考我的博文《怎样写一个解释器》。
你说我在贬低这本书的真正价值,因为 GoF 说了:“我们的贡献,就是给这些编程方
式起名字。这样让广大程序员有共同的语言。” 如果这也叫贡献的话,我就可以写本
书,给“空气”,“水”,“猪肉”这些东西全都起个新名字,让大家有“共同的语言
”。这不是搞笑吗。
这不是我的一家之言,Peter Norvig 在 1998 年就做了一个演讲,指出在“动态语言
”里面,GoF 的20几个模式,其中绝大部分都“透明”了。也就是说,你根本感觉不到
它们的存在。这就像我刚才告诉你的。
在这里 Norvig 的观点是正确的,不过需要小心一个概念错误。Norvig 对“静态语言
”的概念是有局限性的。有的静态语言其实也能传递函数作为参数,而且不像 Java 那
样什么都得放进 class 里。这样的静态语言,其实也可以避免大部分 GoF 设计模式。
而“动态语言”这个概念,在程序语言的理论里面,其实是没有明确的定义的。“动态
语言”其实也能进行某些“静态类型检查”。不过在 1998 年,我还是个啥都不懂的屁
孩,所以这里就不跟 Norvig 大叔计较了。
既然老人们都有历史局限性,那么为啥我还跟 GoF 找茬?本来这本书很老了,如果没
有人再被它误导的话,这篇博文也就不必存在了。可是当我在 Google 实习的时候,我
发现几乎每个程序员的书架上都有一本 GoF!我在 Google 实习了两次,第一次的时候
代码全都是我一个人写的,所以没有使用任何 GoF 设计模式。代码直接,精巧而简单
。当我第二次回到 Google,发现我的代码里已经被加入了各种 factory,visitor,…
… 其实啥好事也没做,只不过让我的代码弯了几道弯,让人难以理解。
可见一本坏书,毁掉的不只是一代程序员。鉴于如此,特发此文。各位新手,希望你们
敲响警钟,不要再走上这条老路,写出代码来让大家痛苦。
g*****g
发帖数: 34805
2
这哥们就是井底观天。设计模式的目的本来就不是精巧简洁,而是减少耦合,使得不同
代码可以修改而不互相影响。
当项目更大的时候,在Client端通常采用plugin的结构,在server端则是SOA。使得不
同的team,可以有不同的release schedule。Twitter从ruby转向java/scala,主因之
一就是后者的层次分明。
http://www.infoq.com/articles/twitter-java-use
Twitter has gradually been moving more and more of its stack to the JVM. The
change is partially motivated by oft-cited advantages of the JVM, such as
performance and scalability, but is also driven by a desire for better
encapsulation of individual services, and other architectural concerns.
n**u
发帖数: 6997
3
我真不知道这个SB 是怎么现在还好像成了一个名人
S**I
发帖数: 15689
4
凤姐也是名人,何怪之有。

【在 n**u 的大作中提到】
: 我真不知道这个SB 是怎么现在还好像成了一个名人
r***y
发帖数: 4379
5
--如果这也叫贡献的话,我就可以写本书,给“空气”,“水”,“猪肉”这些东西全
都起个新名字
这人半疯吧, 举例子都不会
简直是it男中的凤姐
有瞎灌的功夫勾个美妞xxoo好不好

【在 x****o 的大作中提到】
: 来源:王垠的博客
: 有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
: 些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
: 的问题,所以想在这里做一个总结。
: 总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
: 可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
: 《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
: 表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。
: GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建

n**u
发帖数: 6997
6
的确是个SB 货色
还一直跳来跳去,哗众取宠

【在 r***y 的大作中提到】
: --如果这也叫贡献的话,我就可以写本书,给“空气”,“水”,“猪肉”这些东西全
: 都起个新名字
: 这人半疯吧, 举例子都不会
: 简直是it男中的凤姐
: 有瞎灌的功夫勾个美妞xxoo好不好

d***a
发帖数: 13752
7
这人写的东西,确实越来越象是风姐在说话了。本来就是工程性的东西,哪来这么多无
病呻吟。
p*****2
发帖数: 21240
8
大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
pattern吗?
X****r
发帖数: 3557
9
Design pattern的确就是大家已经在用的东西总结归纳定个名字而已,
原作者也是这样说的。所以没有必要神话,大部分应该是一看就明白的,
也不用特别地学。但是有了这个总结归纳定名,就大大方便了开发中的
交流与合作。子曰:名不正,则言不顺;言不顺,则事不成。

【在 p*****2 的大作中提到】
: 大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
: pattern吗?

y*******g
发帖数: 6599
10
design pattern本来的例子就是c++为主

【在 p*****2 的大作中提到】
: 大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
: pattern吗?

相关主题
哪里有各种设计模式的C++示例?c++越写越没有信心,觉得自己水平弱的不行
请推荐C++ design方面的书王垠 -- 拳打南山魏老 脚踢北海好虫
老板嫌我C++太差!请推荐。请教: 如何提高CS基础
进入Programming版参与讨论
t****t
发帖数: 6806
11
子的废话为什么这么多...

【在 X****r 的大作中提到】
: Design pattern的确就是大家已经在用的东西总结归纳定个名字而已,
: 原作者也是这样说的。所以没有必要神话,大部分应该是一看就明白的,
: 也不用特别地学。但是有了这个总结归纳定名,就大大方便了开发中的
: 交流与合作。子曰:名不正,则言不顺;言不顺,则事不成。

r*******n
发帖数: 3020
12
我觉得有些道理,design pattern能不用就不用,但是design pattern
很值得学习。函数编程应该是不强调design pattern,就像王银博客里说的
因为design pattern在函数编程里已经存在了。
我觉得design pattern更像是一种工程师工作交流的语言,比如你想说这个
项目怎么设计,说几个模式的名字其他人就大致明白了。
Design pattern的问题是可能过度应用,增加了逻辑层级,代码也相应臃肿,
就跟java臃肿的代码遭人诟病一样, 但是对于多人的大项目java依然是最佳选择,
因为现在我们没有更好的东西来代替。JVM语言clojure的作者也说过clojure目前
适合小团队。

【在 p*****2 的大作中提到】
: 大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
: pattern吗?

p*****2
发帖数: 21240
13

我以前用C++的时候,从来没有考虑过什么design pattern,好像就是在java那里发扬
光大了。

【在 y*******g 的大作中提到】
: design pattern本来的例子就是c++为主
p*****2
发帖数: 21240
14

我个人不喜欢那些臃肿的代码。也不太清楚不这么搞项目就做不成吗。

【在 r*******n 的大作中提到】
: 我觉得有些道理,design pattern能不用就不用,但是design pattern
: 很值得学习。函数编程应该是不强调design pattern,就像王银博客里说的
: 因为design pattern在函数编程里已经存在了。
: 我觉得design pattern更像是一种工程师工作交流的语言,比如你想说这个
: 项目怎么设计,说几个模式的名字其他人就大致明白了。
: Design pattern的问题是可能过度应用,增加了逻辑层级,代码也相应臃肿,
: 就跟java臃肿的代码遭人诟病一样, 但是对于多人的大项目java依然是最佳选择,
: 因为现在我们没有更好的东西来代替。JVM语言clojure的作者也说过clojure目前
: 适合小团队。

c****e
发帖数: 1453
15
团队一大,烂人就多。框架臃肿一点容忍度就高,也容易follow,从工程的角度不是什
么坏事情。如果team小,还是越简练越好。不行就马上refactor,甚至重写。来个新人
,pickup也快。

【在 p*****2 的大作中提到】
:
: 我个人不喜欢那些臃肿的代码。也不太清楚不这么搞项目就做不成吗。

t*****n
发帖数: 4908
16
没读过C++牛魔王Andrei Alexandrescu的Modern C++ Design?

【在 p*****2 的大作中提到】
:
: 我个人不喜欢那些臃肿的代码。也不太清楚不这么搞项目就做不成吗。

y*******g
发帖数: 6599
17
那个太恐怖了。读完就放弃c++了

【在 t*****n 的大作中提到】
: 没读过C++牛魔王Andrei Alexandrescu的Modern C++ Design?
n*w
发帖数: 3393
18
gof design pattern是主要针对oop语言的。如果用fp,他说的那个visitor是不需要。
fp有其他的design pattern用。
y*******g
发帖数: 6599
19
有什么书总结fp的design pattern吗

【在 n*w 的大作中提到】
: gof design pattern是主要针对oop语言的。如果用fp,他说的那个visitor是不需要。
: fp有其他的design pattern用。

n*w
发帖数: 3393
20
我自己没有读过专门讲fp design pattern的书。好像记得有人提过一本书。我去搜索
一下。

【在 y*******g 的大作中提到】
: 有什么书总结fp的design pattern吗
相关主题
$3.95的Lisp In Small Pieces设计模式作者之一John Vlissides去世
你们这些python黑EE找CS的工作求指教
Peter Norvig说编程竞赛强与工作干的好成反比 (转载)hadoop java 里面的SomeClass.class 是什么意思?
进入Programming版参与讨论
t*****n
发帖数: 4908
21
呵呵呵,不过还是挺有意思的。那boost就是天书了。

【在 y*******g 的大作中提到】
: 那个太恐怖了。读完就放弃c++了
n*w
发帖数: 3393
22
那本书和loki关系紧密。
loki现在怎样了?好像比boost更“template".

【在 t*****n 的大作中提到】
: 呵呵呵,不过还是挺有意思的。那boost就是天书了。
p*****2
发帖数: 21240
23

我觉得这个比较有道理。应该完全看情况使用。

【在 c****e 的大作中提到】
: 团队一大,烂人就多。框架臃肿一点容忍度就高,也容易follow,从工程的角度不是什
: 么坏事情。如果team小,还是越简练越好。不行就马上refactor,甚至重写。来个新人
: ,pickup也快。

g*****g
发帖数: 34805
24
我前面提到了,就算团队每个人都很牛逼。项目一大,要分成不同的组,开发周期不同
,怎么办?部署之前一个小时,一个team发现一个严重bug,部署被推。第二天找到这
个bug的解决方案,但必须改变接口,另一个team必须跟着修改并且重新评估
regression,再推两天。
你要是开发windows,几年一个版本,这个搞法也还凑活。互联网公司,一到两周一个
release,这么折腾没法活了,所以必须SOA。有兴趣的可以读读这个文章,几乎所有大
的互联网公司
都有这个转变过程。
http://techblog.netflix.com/2012/06/netflix-operations-part-i-g

【在 c****e 的大作中提到】
: 团队一大,烂人就多。框架臃肿一点容忍度就高,也容易follow,从工程的角度不是什
: 么坏事情。如果team小,还是越简练越好。不行就马上refactor,甚至重写。来个新人
: ,pickup也快。

t****a
发帖数: 1212
25
Paul Graham和Peter Novig好像也就说说lisp自带设计模式的优点无需费力,顺带吹吹
FP强大的地方,但好像没有说设计模式对C/Java这样的主流传统型语言程序带来的好坏
?王垠就直接开始砍了啊,直接下结论说是坏的?他的根据在哪里啊,自己猜的么?哎
,太过自信了吧。

【在 x****o 的大作中提到】
: 来源:王垠的博客
: 有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
: 些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
: 的问题,所以想在这里做一个总结。
: 总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
: 可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
: 《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
: 表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。
: GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建

p*****2
发帖数: 21240
26

大牛说说设计模式在C的应用如何呀?

【在 t****a 的大作中提到】
: Paul Graham和Peter Novig好像也就说说lisp自带设计模式的优点无需费力,顺带吹吹
: FP强大的地方,但好像没有说设计模式对C/Java这样的主流传统型语言程序带来的好坏
: ?王垠就直接开始砍了啊,直接下结论说是坏的?他的根据在哪里啊,自己猜的么?哎
: ,太过自信了吧。

i***o
发帖数: 750
27
如果说java 成天提design pattern是弱智的话,c++现在搞这么多 template 基本上就
属于自宫性质。看了超级恶心。

【在 n*w 的大作中提到】
: 那本书和loki关系紧密。
: loki现在怎样了?好像比boost更“template".

r****y
发帖数: 26819
28
因为他老是发微博。收集起来都出了大半本论语。

【在 t****t 的大作中提到】
: 子的废话为什么这么多...
s****y
发帖数: 38
29
GoF明显就是一本害人的书,想不到总算有明眼人指出来了。我相信Linus会有同样的看
法。

【在 x****o 的大作中提到】
: 来源:王垠的博客
: 有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
: 些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
: 的问题,所以想在这里做一个总结。
: 总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
: 可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
: 《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
: 表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。
: GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建

r*g
发帖数: 3159
30
design pattern是到你这个层次的才用得着考虑的.
做面试题的学生,把语言当计算器的普通人,不用刻意去学.

【在 g*****g 的大作中提到】
: 我前面提到了,就算团队每个人都很牛逼。项目一大,要分成不同的组,开发周期不同
: ,怎么办?部署之前一个小时,一个team发现一个严重bug,部署被推。第二天找到这
: 个bug的解决方案,但必须改变接口,另一个team必须跟着修改并且重新评估
: regression,再推两天。
: 你要是开发windows,几年一个版本,这个搞法也还凑活。互联网公司,一到两周一个
: release,这么折腾没法活了,所以必须SOA。有兴趣的可以读读这个文章,几乎所有大
: 的互联网公司
: 都有这个转变过程。
: http://techblog.netflix.com/2012/06/netflix-operations-part-i-g

相关主题
问个设计模式的问题吧,STL里面设计模式要不要搞?
问一个设计模式的问题快速系统学习 c++ design pattern有什么好书或者网站吗
design patterns到底有用吗?除了model view controller (mvc)这种pattern还有什么pattern流行?
进入Programming版参与讨论
m********5
发帖数: 17667
31
大周末的就看你们转这个傻逼的东西!
你们自己看着不觉得恶心么? 一个比凤姐还没有自知之明的所谓码工, 靠博出位挣眼球
. 怎么现在又热起来了? 他是要海归了吧? 想炒点人气出来

【在 x****o 的大作中提到】
: 来源:王垠的博客
: 有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
: 些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
: 的问题,所以想在这里做一个总结。
: 总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
: 可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
: 《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
: 表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。
: GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建

l*********s
发帖数: 5409
32
不会吧,这个超赞啊

【在 y*******g 的大作中提到】
: 那个太恐怖了。读完就放弃c++了
m********5
发帖数: 17667
33
LoL, 本版到底都是些什么程序员啊?!
c++没有template基本不用做项目了... 废品一个

【在 i***o 的大作中提到】
: 如果说java 成天提design pattern是弱智的话,c++现在搞这么多 template 基本上就
: 属于自宫性质。看了超级恶心。

m********5
发帖数: 17667
34
开发win这么搞也不行...

【在 g*****g 的大作中提到】
: 我前面提到了,就算团队每个人都很牛逼。项目一大,要分成不同的组,开发周期不同
: ,怎么办?部署之前一个小时,一个team发现一个严重bug,部署被推。第二天找到这
: 个bug的解决方案,但必须改变接口,另一个team必须跟着修改并且重新评估
: regression,再推两天。
: 你要是开发windows,几年一个版本,这个搞法也还凑活。互联网公司,一到两周一个
: release,这么折腾没法活了,所以必须SOA。有兴趣的可以读读这个文章,几乎所有大
: 的互联网公司
: 都有这个转变过程。
: http://techblog.netflix.com/2012/06/netflix-operations-part-i-g

l*********s
发帖数: 5409
35
yeah,没有template stl完全没法写了, stl用不了那还不如写plain C了, 现代语言
都大同小异,template这块大概是C++最出色的特性了。


【在 m********5 的大作中提到】
: LoL, 本版到底都是些什么程序员啊?!
: c++没有template基本不用做项目了... 废品一个

t****a
发帖数: 1212
36
没参与过大项目,没看懂过那些设计模式,所以不敢乱评论啊。以前有阵子还挺喜欢王
垠的,因为他崇尚开源,在PL领域懂的很多。现在才发现他真什么都敢评论,没听说他
也是软件工程领域的专家啊。

【在 p*****2 的大作中提到】
:
: 大牛说说设计模式在C的应用如何呀?

j******c
发帖数: 294
37
设计模式不是特定语言的,GoF的书用的是C++例子,当时可能还没有Java

【在 p*****2 的大作中提到】
: 大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
: pattern吗?

d****i
发帖数: 4809
38
在Linus眼里,很多语言和框架都是horrible,bullshit的,不过他有这个资格,作为
开源世界的奠基创始人之一和代表Linux的一种崇高理念,他说什么也是不算太过分,
和王垠这种什么都没做光看了一点书就整天唧唧歪歪的是完全不一样的。

【在 s****y 的大作中提到】
: GoF明显就是一本害人的书,想不到总算有明眼人指出来了。我相信Linus会有同样的看
: 法。

h********3
发帖数: 2075
39
我们软件工程课上老师说,设计模式实际当中最大的好处是communication上便捷。

The

【在 g*****g 的大作中提到】
: 这哥们就是井底观天。设计模式的目的本来就不是精巧简洁,而是减少耦合,使得不同
: 代码可以修改而不互相影响。
: 当项目更大的时候,在Client端通常采用plugin的结构,在server端则是SOA。使得不
: 同的team,可以有不同的release schedule。Twitter从ruby转向java/scala,主因之
: 一就是后者的层次分明。
: http://www.infoq.com/articles/twitter-java-use
: Twitter has gradually been moving more and more of its stack to the JVM. The
: change is partially motivated by oft-cited advantages of the JVM, such as
: performance and scalability, but is also driven by a desire for better
: encapsulation of individual services, and other architectural concerns.

t****a
发帖数: 1212
40
这儿有一本scala的,不过还没出来
http://manning.com/bjarnason/, part 3

【在 n*w 的大作中提到】
: 我自己没有读过专门讲fp design pattern的书。好像记得有人提过一本书。我去搜索
: 一下。

相关主题
除了model view controller (mvc)这种pattern还有什么pattern流行?请推荐C++ design方面的书
OOP"设计模式“,Java与Clojure代码对比老板嫌我C++太差!请推荐。
哪里有各种设计模式的C++示例?c++越写越没有信心,觉得自己水平弱的不行
进入Programming版参与讨论
h********3
发帖数: 2075
41
依赖注入等很多概念是C/C++程序很难理解的。

【在 p*****2 的大作中提到】
:
: 大牛说说设计模式在C的应用如何呀?

p*****2
发帖数: 21240
42

C++有像Java这样强调design pattern吗?

【在 j******c 的大作中提到】
: 设计模式不是特定语言的,GoF的书用的是C++例子,当时可能还没有Java
p*****2
发帖数: 21240
43

win是怎么搞的?

【在 m********5 的大作中提到】
: 开发win这么搞也不行...
p*****2
发帖数: 21240
44

没有什么不好理解的吧。主要是靠reflection吧?C里边没有。主要是不理解为什么到
处都用DI。

【在 h********3 的大作中提到】
: 依赖注入等很多概念是C/C++程序很难理解的。
i***o
发帖数: 750
45
他以为java很神奇

【在 p*****2 的大作中提到】
:
: 没有什么不好理解的吧。主要是靠reflection吧?C里边没有。主要是不理解为什么到
: 处都用DI。

p*****2
发帖数: 21240
46

其实Java算是门好学的语言。感觉也就是python比它更好学了。各种概念基本一看就能
理解吧。只是不理解为什么代码一定要那样去写而已。这个一直也没有大牛给好好讲讲


【在 i***o 的大作中提到】
: 他以为java很神奇
b***i
发帖数: 3043
47
好虫能否说一下某个team如何release而不影响整个服务
比如,是不是在半夜的时候没有用户看电视的时候重启一个instance?还是别的什么?
还是能做到某个时间之前的用户继续使用有bug的,之后的用户看到新的release?

【在 g*****g 的大作中提到】
: 我前面提到了,就算团队每个人都很牛逼。项目一大,要分成不同的组,开发周期不同
: ,怎么办?部署之前一个小时,一个team发现一个严重bug,部署被推。第二天找到这
: 个bug的解决方案,但必须改变接口,另一个team必须跟着修改并且重新评估
: regression,再推两天。
: 你要是开发windows,几年一个版本,这个搞法也还凑活。互联网公司,一到两周一个
: release,这么折腾没法活了,所以必须SOA。有兴趣的可以读读这个文章,几乎所有大
: 的互联网公司
: 都有这个转变过程。
: http://techblog.netflix.com/2012/06/netflix-operations-part-i-g

C***y
发帖数: 2546
48
请教一下,依赖注入跟c++传interface有什么区别?
刚开始看java,稀里糊涂

★ 发自iPhone App: ChineseWeb 7.8

【在 h********3 的大作中提到】
: 依赖注入等很多概念是C/C++程序很难理解的。
g*****g
发帖数: 34805
49
We have an open source tool called Asgard, it'a web UI to manage deployment
on AWS. Basically you start a new cluster, deploy your new version, finish
smoke test, then shutdown the old one.
The new and old clusters coexist for a short period. Deployment often
happens in the day. So that if there's any issue found, it can be resolved.
这个slides写得很清楚。
http://www.slideshare.net/carleq/building-cloudtoolsfornetflixc

【在 b***i 的大作中提到】
: 好虫能否说一下某个team如何release而不影响整个服务
: 比如,是不是在半夜的时候没有用户看电视的时候重启一个instance?还是别的什么?
: 还是能做到某个时间之前的用户继续使用有bug的,之后的用户看到新的release?

x*******1
发帖数: 28835
50
跟ndu有点像。

deployment

【在 g*****g 的大作中提到】
: We have an open source tool called Asgard, it'a web UI to manage deployment
: on AWS. Basically you start a new cluster, deploy your new version, finish
: smoke test, then shutdown the old one.
: The new and old clusters coexist for a short period. Deployment often
: happens in the day. So that if there's any issue found, it can be resolved.
: 这个slides写得很清楚。
: http://www.slideshare.net/carleq/building-cloudtoolsfornetflixc

相关主题
王垠 -- 拳打南山魏老 脚踢北海好虫你们这些python黑
请教: 如何提高CS基础Peter Norvig说编程竞赛强与工作干的好成反比 (转载)
$3.95的Lisp In Small Pieces设计模式作者之一John Vlissides去世
进入Programming版参与讨论
x****u
发帖数: 44466
51
是的

【在 p*****2 的大作中提到】
: 大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
: pattern吗?

b***i
发帖数: 3043
52
AWS允许不同的team发布的不同的application使用同一个数据库吗?
我现在面临这样的问题,如果把sign in, rating等分成不同的appliction,如何共享数
据库?我用google app engine,无法共享。

deployment

【在 g*****g 的大作中提到】
: We have an open source tool called Asgard, it'a web UI to manage deployment
: on AWS. Basically you start a new cluster, deploy your new version, finish
: smoke test, then shutdown the old one.
: The new and old clusters coexist for a short period. Deployment often
: happens in the day. So that if there's any issue found, it can be resolved.
: 这个slides写得很清楚。
: http://www.slideshare.net/carleq/building-cloudtoolsfornetflixc

g*****g
发帖数: 34805
53
simple db or rds, not a problem

【在 b***i 的大作中提到】
: AWS允许不同的team发布的不同的application使用同一个数据库吗?
: 我现在面临这样的问题,如果把sign in, rating等分成不同的appliction,如何共享数
: 据库?我用google app engine,无法共享。
:
: deployment

j********x
发帖数: 2330
54
java目前在系统开发里算是一家独大了
至于是不是因为推崇dp或者没有dp更大,这种问题只能设想
语言比语言没意思

【在 p*****2 的大作中提到】
: 大家都觉得他说的一点道理没有?想知道除了Java,其他语言也这么强调design
: pattern吗?

i***o
发帖数: 750
55
即便有template stl ,c++現在的代碼也只是越來越難看,越來越像天書。歷史積累太
多,實在不是啥好事。
boost 弄出來 就是現實版的 big bang theory 笑話。自娛自樂。

【在 l*********s 的大作中提到】
: yeah,没有template stl完全没法写了, stl用不了那还不如写plain C了, 现代语言
: 都大同小异,template这块大概是C++最出色的特性了。
: 。

i***o
发帖数: 750
56
搞得好像在java 和 design pattern 之前没有大规模项目似的。
design pattern 很多东西是错的,最多也就是一家之言。前面有人提的,除了java到
底多少人提个所谓设计模式?

deployment

【在 g*****g 的大作中提到】
: We have an open source tool called Asgard, it'a web UI to manage deployment
: on AWS. Basically you start a new cluster, deploy your new version, finish
: smoke test, then shutdown the old one.
: The new and old clusters coexist for a short period. Deployment often
: happens in the day. So that if there's any issue found, it can be resolved.
: 这个slides写得很清楚。
: http://www.slideshare.net/carleq/building-cloudtoolsfornetflixc

a*****e
发帖数: 1700
57
FP 的 design pattern 是 Category Theory.

【在 y*******g 的大作中提到】
: 有什么书总结fp的design pattern吗
m********5
发帖数: 17667
58
这位骂boost的更是不知所云
估计也就看过C++代码, 没怎么自己写...

【在 i***o 的大作中提到】
: 即便有template stl ,c++現在的代碼也只是越來越難看,越來越像天書。歷史積累太
: 多,實在不是啥好事。
: boost 弄出來 就是現實版的 big bang theory 笑話。自娛自樂。

p*****2
发帖数: 21240
59

是呀。我也参加过几千工程师的大项目。从来没听人提起design pattern。

【在 i***o 的大作中提到】
: 搞得好像在java 和 design pattern 之前没有大规模项目似的。
: design pattern 很多东西是错的,最多也就是一家之言。前面有人提的,除了java到
: 底多少人提个所谓设计模式?
:
: deployment

m********5
发帖数: 17667
60
恩以前造飞机也没听过用计算机
所以现在不用计算机就能造飞机 LoL
时代是发展的, 对设计效率要求也是很不同的

【在 p*****2 的大作中提到】
:
: 是呀。我也参加过几千工程师的大项目。从来没听人提起design pattern。

相关主题
EE找CS的工作求指教问一个设计模式的问题
hadoop java 里面的SomeClass.class 是什么意思?design patterns到底有用吗?
问个设计模式的问题吧,STL里面设计模式要不要搞?
进入Programming版参与讨论
g*****g
发帖数: 34805
61
yahoo在google之前就做了搜索引擎,myspace在facebook之前就搞了社交,苹果在微软
之前就做了个人电脑。你这葡萄酸的。
design pattern本来就是实践的总结。现在提DP也不只是GoF的那些。比如有大量EAI的
pattern是这10年总结出来的。这种你不懂的东西就说没用,是最搞笑的了。

【在 i***o 的大作中提到】
: 搞得好像在java 和 design pattern 之前没有大规模项目似的。
: design pattern 很多东西是错的,最多也就是一家之言。前面有人提的,除了java到
: 底多少人提个所谓设计模式?
:
: deployment

g*****g
发帖数: 34805
62
你用类库吗?类库里就有大量的设计模式。你不写不等于你不用。

【在 p*****2 的大作中提到】
:
: 是呀。我也参加过几千工程师的大项目。从来没听人提起design pattern。

p*****2
发帖数: 21240
63

不用。都是C写的,没有类。

【在 g*****g 的大作中提到】
: 你用类库吗?类库里就有大量的设计模式。你不写不等于你不用。
p*****2
发帖数: 21240
64

那你讲讲design pattern怎么应用到C项目中。

【在 m********5 的大作中提到】
: 恩以前造飞机也没听过用计算机
: 所以现在不用计算机就能造飞机 LoL
: 时代是发展的, 对设计效率要求也是很不同的

c****e
发帖数: 1453
65
我们的架构也是SOA。没错, 这种结构让Agile成为可能。我原来说的意思是很不喜欢
不管有没有用,为了一两个小的功能,就引入一大堆的dependency.一个team对其整个
code的掌握程度基本和产品的稳定性,出新feature的速度是正相关的。
其实你说的问题即使是10年前也不是大问题了,interface可以versioning,一般来说不
会是合作的瓶颈。做网络服务,release的速度更多的是和engineering infastructure
有关系:dependency的管理,build的速度,automated test, release gate,
deployment能做到什么程度等等。hotfix的时候,from code to production 是个硬指
标。

【在 g*****g 的大作中提到】
: 我前面提到了,就算团队每个人都很牛逼。项目一大,要分成不同的组,开发周期不同
: ,怎么办?部署之前一个小时,一个team发现一个严重bug,部署被推。第二天找到这
: 个bug的解决方案,但必须改变接口,另一个team必须跟着修改并且重新评估
: regression,再推两天。
: 你要是开发windows,几年一个版本,这个搞法也还凑活。互联网公司,一到两周一个
: release,这么折腾没法活了,所以必须SOA。有兴趣的可以读读这个文章,几乎所有大
: 的互联网公司
: 都有这个转变过程。
: http://techblog.netflix.com/2012/06/netflix-operations-part-i-g

n******t
发帖数: 4406
66
这个意义不大,我想说的是你写得大部分代码里面有多少能有非常清晰的归结到这些所谓
design pattern 里面去。

【在 X****r 的大作中提到】
: Design pattern的确就是大家已经在用的东西总结归纳定个名字而已,
: 原作者也是这样说的。所以没有必要神话,大部分应该是一看就明白的,
: 也不用特别地学。但是有了这个总结归纳定名,就大大方便了开发中的
: 交流与合作。子曰:名不正,则言不顺;言不顺,则事不成。

n******t
发帖数: 4406
67
我很感兴趣这些所谓写design pattern的"大师",到底写过什么牛B的系统。
据我所知,好像是没有。

【在 s****y 的大作中提到】
: GoF明显就是一本害人的书,想不到总算有明眼人指出来了。我相信Linus会有同样的看
: 法。

g*****g
发帖数: 34805
68
这个当然是瓶颈,当一个大东西打成小块分别部署的时候,各个小块可以有灵活性,影
响有限。
当你整个东西做成一个部署,出个问题整个得rollback,否则不可靠,因为你没有测试
过,
不能保证兼容。

infastructure

【在 c****e 的大作中提到】
: 我们的架构也是SOA。没错, 这种结构让Agile成为可能。我原来说的意思是很不喜欢
: 不管有没有用,为了一两个小的功能,就引入一大堆的dependency.一个team对其整个
: code的掌握程度基本和产品的稳定性,出新feature的速度是正相关的。
: 其实你说的问题即使是10年前也不是大问题了,interface可以versioning,一般来说不
: 会是合作的瓶颈。做网络服务,release的速度更多的是和engineering infastructure
: 有关系:dependency的管理,build的速度,automated test, release gate,
: deployment能做到什么程度等等。hotfix的时候,from code to production 是个硬指
: 标。

g*****g
发帖数: 34805
69
Design pattern本来就是程序设计里比较高级的部分,在框架设计设计里用得比较多。
如果你不写公用的API,所有代码都在一个小组里完成,出了问题想怎么改就怎么改,
是不会
意识到它的用处的。
JDK里面充满了各种design pattern的实现。
http://stackoverflow.com/questions/1673841/examples-of-gof-desi
同时这些design pattern是一些主流框架的核心,比如Spring IoC,就是一个Factory
和Singleton的实现。有了这东西之后,你往里填商业逻辑即可,由Spring来管理
dependency。所以哪怕你不实现,也不能说这些东西没用。

所谓

【在 n******t 的大作中提到】
: 这个意义不大,我想说的是你写得大部分代码里面有多少能有非常清晰的归结到这些所谓
: design pattern 里面去。

t***a
发帖数: 416
70
你说的这都是OO世界的design pattern.....
他们拿非OO世界的东西来反驳你,这就是鸡同鸭讲嘛

Factory

【在 g*****g 的大作中提到】
: Design pattern本来就是程序设计里比较高级的部分,在框架设计设计里用得比较多。
: 如果你不写公用的API,所有代码都在一个小组里完成,出了问题想怎么改就怎么改,
: 是不会
: 意识到它的用处的。
: JDK里面充满了各种design pattern的实现。
: http://stackoverflow.com/questions/1673841/examples-of-gof-desi
: 同时这些design pattern是一些主流框架的核心,比如Spring IoC,就是一个Factory
: 和Singleton的实现。有了这东西之后,你往里填商业逻辑即可,由Spring来管理
: dependency。所以哪怕你不实现,也不能说这些东西没用。
:

相关主题
设计模式要不要搞?OOP"设计模式“,Java与Clojure代码对比
快速系统学习 c++ design pattern有什么好书或者网站吗哪里有各种设计模式的C++示例?
除了model view controller (mvc)这种pattern还有什么pattern流行?请推荐C++ design方面的书
进入Programming版参与讨论
p*****2
发帖数: 21240
71

design pattern跟OO没有必然联系吧?怎么叫OO世界的DP?

【在 t***a 的大作中提到】
: 你说的这都是OO世界的design pattern.....
: 他们拿非OO世界的东西来反驳你,这就是鸡同鸭讲嘛
:
: Factory

t***a
发帖数: 416
72
goodbug说的那些pattern,哪个不是基于oo的啊?

【在 p*****2 的大作中提到】
:
: design pattern跟OO没有必然联系吧?怎么叫OO世界的DP?

c****e
发帖数: 1453
73
大家开发的东西不同,看法就不一样。很多人烦主要是搞了一堆名词,看起来很复杂的
样子,其实道理很直接。很多时候code就是follow common sense,没有那么多花里胡哨
的东西。interface c++里面也是standard practice, 没有DI/IOC这么多说法,还搞成
Spring那样具复杂的XML,很多时候根本不需要。
p*****2
发帖数: 21240
74

没明白 我昨天查了一下 都说dp oo是两码事

【在 t***a 的大作中提到】
: goodbug说的那些pattern,哪个不是基于oo的啊?
p*****2
发帖数: 21240
75

我也是这个感觉的 我能理解它的优势 但是很多情况下感觉没必要搞这么复杂 java本
身也有很多局限 这么搞了其实会出其它问题的

【在 c****e 的大作中提到】
: 大家开发的东西不同,看法就不一样。很多人烦主要是搞了一堆名词,看起来很复杂的
: 样子,其实道理很直接。很多时候code就是follow common sense,没有那么多花里胡哨
: 的东西。interface c++里面也是standard practice, 没有DI/IOC这么多说法,还搞成
: Spring那样具复杂的XML,很多时候根本不需要。

t***a
发帖数: 416
76
不oo当然也有dp, 可是goodbug举得例子都是java中基于oo的例子
比如singleton, ioc
你用c写个singleton出来的话。。。。。

【在 p*****2 的大作中提到】
:
: 我也是这个感觉的 我能理解它的优势 但是很多情况下感觉没必要搞这么复杂 java本
: 身也有很多局限 这么搞了其实会出其它问题的

p*****2
发帖数: 21240
77

C写不了吗?

【在 t***a 的大作中提到】
: 不oo当然也有dp, 可是goodbug举得例子都是java中基于oo的例子
: 比如singleton, ioc
: 你用c写个singleton出来的话。。。。。

t***a
发帖数: 416
78
要不谁出来写一个,让我见识见识。。。。
其实我更期待谁写个erlang的singleton
前面是你说的吧,几千人的大项目,从来不用dp, 那是java的项目?

【在 p*****2 的大作中提到】
:
: C写不了吗?

n******t
发帖数: 4406
79
C也可以的吧。本质上就是拿句柄之前查是不是为空,是就创建否则就用这么一个逻辑.
其实Singleton本来的名字叫做lazy initialization.
这东西其实一般来说是很不提倡的。本质上就是资源的用户不想搞明白什么时候
创建资源,而是想用的时候就拿来用。当然有时候这种事情是有point的。
不过像很多C++程序员那样漫天乱飞实在是瞎搞,我估计都是看一些所谓的 C++
经典参考书的结果。

【在 t***a 的大作中提到】
: 要不谁出来写一个,让我见识见识。。。。
: 其实我更期待谁写个erlang的singleton
: 前面是你说的吧,几千人的大项目,从来不用dp, 那是java的项目?

t***a
发帖数: 416
80
受教了,原来还有这种渊源。。。。。
java的程序员们也是design pattern乱上啊,哪哪都是factory,adapter和decorator

辑.

【在 n******t 的大作中提到】
: C也可以的吧。本质上就是拿句柄之前查是不是为空,是就创建否则就用这么一个逻辑.
: 其实Singleton本来的名字叫做lazy initialization.
: 这东西其实一般来说是很不提倡的。本质上就是资源的用户不想搞明白什么时候
: 创建资源,而是想用的时候就拿来用。当然有时候这种事情是有point的。
: 不过像很多C++程序员那样漫天乱飞实在是瞎搞,我估计都是看一些所谓的 C++
: 经典参考书的结果。

相关主题
老板嫌我C++太差!请推荐。请教: 如何提高CS基础
c++越写越没有信心,觉得自己水平弱的不行$3.95的Lisp In Small Pieces
王垠 -- 拳打南山魏老 脚踢北海好虫你们这些python黑
进入Programming版参与讨论
p*****2
发帖数: 21240
81

这点我没搞明白。不是现在讨论的是DP吗?你怎么总是往java身上靠呢?
按照我的理解,DP本来跟OO没什么关系,跟Java更没什么关系了。但是Java把DP用到极
致了,所以让人感觉DP跟Java关系很强。其实从本质来说,DP跟Java没什么关系才对吧


【在 t***a 的大作中提到】
: 要不谁出来写一个,让我见识见识。。。。
: 其实我更期待谁写个erlang的singleton
: 前面是你说的吧,几千人的大项目,从来不用dp, 那是java的项目?

p*****2
发帖数: 21240
82

我感觉Java这么强调DP是因为Java语言的很多先天不足造成的。

【在 t***a 的大作中提到】
: 受教了,原来还有这种渊源。。。。。
: java的程序员们也是design pattern乱上啊,哪哪都是factory,adapter和decorator
:
: 辑.

l*******b
发帖数: 2586
83
人呀,不断地追逐新的认识。不断地自我否定。有人有了自己的想法,有些人则迷失在
匆匆大道之上,谁是谁非,历史也无法公断。虽它去吧,哈哈

【在 x****o 的大作中提到】
: 来源:王垠的博客
: 有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
: 些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
: 的问题,所以想在这里做一个总结。
: 总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
: 可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
: 《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
: 表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。
: GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建

t***a
发帖数: 416
84
因为的确关系很强。。。。对于我熟悉的其他语言来说,dp是为了解决特殊问题的特殊
办法
可是对于java来说,googbug前面都讲了。。。我就不多说了

【在 p*****2 的大作中提到】
:
: 我感觉Java这么强调DP是因为Java语言的很多先天不足造成的。

p*****2
发帖数: 21240
85

看来我的感觉有可能是对的。刚刚看到这段话。Java这么强调DP,确实有先天不足的原
因。其他语言如果强大的话,很多东西都很自然,没必要这么强调DP了。所以Java总是
把DP挂在嘴边make sense的,但是没有必要把DP抬那么高。因为其他语言里可能是很简
单就搞定了的事情。
The GoF Design Patterns are perhaps the most popular design fads of Software
ever. However some people argue that they are more or less solutions to the
deficiencies of Language itself (particularly C++/Java) and if the language
is powerful enough they are redundant.

【在 t***a 的大作中提到】
: 因为的确关系很强。。。。对于我熟悉的其他语言来说,dp是为了解决特殊问题的特殊
: 办法
: 可是对于java来说,googbug前面都讲了。。。我就不多说了

p*****2
发帖数: 21240
86
我又看了一遍王垠的文章,怎么越来越觉得有道理呢?
n******t
发帖数: 4406
87
Java肯定这种问题肯定更严重。。。
因为学Java的人一般缺乏resource management的意识。所以很多用的别的语言自然需
要考虑的问题在java里面就必须要做成pattern人才会意识到了。

【在 t***a 的大作中提到】
: 受教了,原来还有这种渊源。。。。。
: java的程序员们也是design pattern乱上啊,哪哪都是factory,adapter和decorator
:
: 辑.

n******t
发帖数: 4406
88
网瘾很多文章都是有一定道理的。
但是说出问题和解决还是有一段距离,而且他批评比较多,所以
不太受人欢迎。

【在 p*****2 的大作中提到】
: 我又看了一遍王垠的文章,怎么越来越觉得有道理呢?
t***a
发帖数: 416
89
先天不足太严重了,我觉得是java做一些事情比较容易被程序员写出很ugly的代码, 然
后借助dp, 让这些东西变得优雅一点,毛病少一点

【在 p*****2 的大作中提到】
: 我又看了一遍王垠的文章,怎么越来越觉得有道理呢?
t***a
发帖数: 416
90
对,的确pattern可能会在某些时候显得太生搬硬套了些,但是如果不用,完全让人自
由发挥,往往会更糟糕

【在 n******t 的大作中提到】
: Java肯定这种问题肯定更严重。。。
: 因为学Java的人一般缺乏resource management的意识。所以很多用的别的语言自然需
: 要考虑的问题在java里面就必须要做成pattern人才会意识到了。

相关主题
Peter Norvig说编程竞赛强与工作干的好成反比 (转载)hadoop java 里面的SomeClass.class 是什么意思?
设计模式作者之一John Vlissides去世问个设计模式的问题吧,STL里面
EE找CS的工作求指教问一个设计模式的问题
进入Programming版参与讨论
t***a
发帖数: 416
91
可是对于java, c#, c++, dp都是被广泛使用的。。。。。这地位能低的了么

Software
the
language

【在 p*****2 的大作中提到】
: 我又看了一遍王垠的文章,怎么越来越觉得有道理呢?
x****u
发帖数: 44466
92
多线程你这么搞要死人的。

辑.

【在 n******t 的大作中提到】
: C也可以的吧。本质上就是拿句柄之前查是不是为空,是就创建否则就用这么一个逻辑.
: 其实Singleton本来的名字叫做lazy initialization.
: 这东西其实一般来说是很不提倡的。本质上就是资源的用户不想搞明白什么时候
: 创建资源,而是想用的时候就拿来用。当然有时候这种事情是有point的。
: 不过像很多C++程序员那样漫天乱飞实在是瞎搞,我估计都是看一些所谓的 C++
: 经典参考书的结果。

G***l
发帖数: 355
93
真不明白你们有什么好疑惑的。design pattern一开始流行是因为GOF那本书,那本书
叫什么?“Design Patterns: Elements of Reusable Object-Oriented Software”。
人家书名都说了,是OO design pattern。Java是典型的OO语言,所以当然Java用的多
。像C#,C++这些里面同样可以用很多。你要是写C语言,很多pattern就没法用了。
如果说广义的design pattern,那就不只是gof,包括所有的为了解决某些问题而总结出
的编程的模版。比如J2EE有pattern,martin fowler有本书叫Patterns of Enterprise
Application Architecture等等。
正是因为OO不完美,没法达到复用,解耦或者其他一些的目标,所以才有了那些
pattern。design pattern不是目的,只是达到目的的手段。就算在OO里面,它也不一
定是解决问题的唯一或者最好的方法。OO之外,就更别说了。不同的场合里,有的
pattern不在需要,有的不适用,有的pattern根本就不会存在。比如C++的RAII在java
里就没法用因为Java是GC的。比如在FP里面,很多gof的pattern就没什么意义或者没必
要特地提起了,很自然就做到,比方说adapter,在FP里面就是个currying跟high
order function简单结合一下,非常灵活,比如strategy,first class function就做
到了,再比如template,没有类和继承,哪来tempalte pattern?
所以design pattern只是一些经验的总结,就像你中学时候做不同的数学题有不同的解
法和公式一样。真正实际的问题,千变万化,不是那些pattern可以简单涵盖的。

【在 t***a 的大作中提到】
: 可是对于java, c#, c++, dp都是被广泛使用的。。。。。这地位能低的了么
:
: Software
: the
: language

y****e
发帖数: 23939
94
是呀,这就是为什么Java也赶快学过来了

【在 l*********s 的大作中提到】
: yeah,没有template stl完全没法写了, stl用不了那还不如写plain C了, 现代语言
: 都大同小异,template这块大概是C++最出色的特性了。
: 。

p*****2
发帖数: 21240
95

Enterprise
说的很好。不过我还有一点不明白,网上,包括mit上,听到无数的人说DP跟OO半毛钱
关系也没有。这个怎么理解?上次jobhunting上几个大牛都给我点出来了。

【在 G***l 的大作中提到】
: 真不明白你们有什么好疑惑的。design pattern一开始流行是因为GOF那本书,那本书
: 叫什么?“Design Patterns: Elements of Reusable Object-Oriented Software”。
: 人家书名都说了,是OO design pattern。Java是典型的OO语言,所以当然Java用的多
: 。像C#,C++这些里面同样可以用很多。你要是写C语言,很多pattern就没法用了。
: 如果说广义的design pattern,那就不只是gof,包括所有的为了解决某些问题而总结出
: 的编程的模版。比如J2EE有pattern,martin fowler有本书叫Patterns of Enterprise
: Application Architecture等等。
: 正是因为OO不完美,没法达到复用,解耦或者其他一些的目标,所以才有了那些
: pattern。design pattern不是目的,只是达到目的的手段。就算在OO里面,它也不一
: 定是解决问题的唯一或者最好的方法。OO之外,就更别说了。不同的场合里,有的

G***l
发帖数: 355
96
广义的design pattern不一定是oo的。gof的那些很有关系。
你确定job版上说的dp是design pattern还是dynamic programming?

【在 p*****2 的大作中提到】
:
: Enterprise
: 说的很好。不过我还有一点不明白,网上,包括mit上,听到无数的人说DP跟OO半毛钱
: 关系也没有。这个怎么理解?上次jobhunting上几个大牛都给我点出来了。

p*****2
发帖数: 21240
97

是design pattern呀。DP这个我还比较熟,不会搞错的。

【在 G***l 的大作中提到】
: 广义的design pattern不一定是oo的。gof的那些很有关系。
: 你确定job版上说的dp是design pattern还是dynamic programming?

G***l
发帖数: 355
98
那我就不知道了。可能他们说的有些上下文吧。比如你找工作,看到某个job
description里面说要熟悉design patterns,那肯定说的是gof那套oo design pattern

【在 p*****2 的大作中提到】
:
: 是design pattern呀。DP这个我还比较熟,不会搞错的。

p*****2
发帖数: 21240
99

pattern
比如这篇文章。http://coolshell.cn/articles/8961.html
前些天发了一篇《如此理解面向对象编程》的文章,然后引起了大家的热议。然后我在
微博上说了一句——“那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来
实现罢了……OO的设计模式思想和Unix的设计思想基本没什么差别”,结果引来了一点
点争议。所以,我写下这篇文章把我的观点说明一下。我希望这样可以让大家更容易地
理解什么是设计模式。我顺便帮OO和 Unix/Linux搞搞基。

【在 G***l 的大作中提到】
: 那我就不知道了。可能他们说的有些上下文吧。比如你找工作,看到某个job
: description里面说要熟悉design patterns,那肯定说的是gof那套oo design pattern

g*****g
发帖数: 34805
100
实现不同,pattern可以不同,但不能没有。比如两个子系统降低耦合的需要是不论什
么语言都一样的。
不是什么东西都需要在语言层面上实现的,design pattern本来也就是一些实现的总结。
这年头,OO语言仍然是主流语言,说OO design pattern不重要就比较荒谬了。
相关主题
design patterns到底有用吗?除了model view controller (mvc)这种pattern还有什么pattern流行?
设计模式要不要搞?OOP"设计模式“,Java与Clojure代码对比
快速系统学习 c++ design pattern有什么好书或者网站吗哪里有各种设计模式的C++示例?
进入Programming版参与讨论
G***l
发帖数: 355
101
“那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来
实现罢了……OO的设计模式思想和Unix的设计思想基本没什么差别”
你这句话不对啊,那23个gof的设计模式就是针对OO的呀,怎么能说半毛钱关系没有呢?

【在 p*****2 的大作中提到】
:
: pattern
: 比如这篇文章。http://coolshell.cn/articles/8961.html
: 前些天发了一篇《如此理解面向对象编程》的文章,然后引起了大家的热议。然后我在
: 微博上说了一句——“那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来
: 实现罢了……OO的设计模式思想和Unix的设计思想基本没什么差别”,结果引来了一点
: 点争议。所以,我写下这篇文章把我的观点说明一下。我希望这样可以让大家更容易地
: 理解什么是设计模式。我顺便帮OO和 Unix/Linux搞搞基。

p*****2
发帖数: 21240
102

呢?
所以我被confuse了。

【在 G***l 的大作中提到】
: “那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来
: 实现罢了……OO的设计模式思想和Unix的设计思想基本没什么差别”
: 你这句话不对啊,那23个gof的设计模式就是针对OO的呀,怎么能说半毛钱关系没有呢?

p*****2
发帖数: 21240
103

结。
是不是他反对的主要是设计模式的教条化。因为确实存在这个现象。我觉得他想说的是
搞Java的不要总以为DP才是软件设计。软件不是都要去这么设计的。根据你的观点,软
件不做大,根本就体会不出DP的优势。因此,DP到处都用确实有教条化的嫌疑,因为不
是什么软件都会做那么大的。
“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
里程序的严重复杂化以及效率低下。

【在 g*****g 的大作中提到】
: 实现不同,pattern可以不同,但不能没有。比如两个子系统降低耦合的需要是不论什
: 么语言都一样的。
: 不是什么东西都需要在语言层面上实现的,design pattern本来也就是一些实现的总结。
: 这年头,OO语言仍然是主流语言,说OO design pattern不重要就比较荒谬了。

G***l
发帖数: 355
104
我扫了一眼你贴的那个link的文章,我不能说他说的不对,但是他把先后次序搞反了。
比如,最初的目的是人们想要复用已有的接口(或者组件,函数等等一切可以复用的东
西),但是换一种方式。然后在OO里面有人想达到这个目的,就发明出adapter
pattern。在FP里面达到这个目的就可以用高阶函数加currying。但你不能反过来说先
有adapter pattern,然后这种pattern还可以应用到OO之外的地去。。。

【在 p*****2 的大作中提到】
:
: 结。
: 是不是他反对的主要是设计模式的教条化。因为确实存在这个现象。我觉得他想说的是
: 搞Java的不要总以为DP才是软件设计。软件不是都要去这么设计的。根据你的观点,软
: 件不做大,根本就体会不出DP的优势。因此,DP到处都用确实有教条化的嫌疑,因为不
: 是什么软件都会做那么大的。
: “设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。

l*********s
发帖数: 5409
105
再好的工具你也无法阻止被人用来写狗屎。对这个人我无话可说。一个没谁听说过的
oberon也能被用来证明他对OS英雄所见。好像自恋就是他唯一的写作目的了。

【在 p*****2 的大作中提到】
:
: 结。
: 是不是他反对的主要是设计模式的教条化。因为确实存在这个现象。我觉得他想说的是
: 搞Java的不要总以为DP才是软件设计。软件不是都要去这么设计的。根据你的观点,软
: 件不做大,根本就体会不出DP的优势。因此,DP到处都用确实有教条化的嫌疑,因为不
: 是什么软件都会做那么大的。
: “设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
: 里程序的严重复杂化以及效率低下。

E*****m
发帖数: 25615
106
這篇講得不錯
n******t
发帖数: 4406
107
多线程无非就是concurrent lazy initialization,
也不是新东西,也和C++没什么必然联系。

【在 x****u 的大作中提到】
: 多线程你这么搞要死人的。
:
: 辑.

x****u
发帖数: 44466
108
加锁解锁之类的轮子少不了。

【在 n******t 的大作中提到】
: 多线程无非就是concurrent lazy initialization,
: 也不是新东西,也和C++没什么必然联系。

b***e
发帖数: 1419
109
看到这个我跪了。大哥,您确信您知道什么是category theory么?

【在 a*****e 的大作中提到】
: FP 的 design pattern 是 Category Theory.
1 (共1页)
进入Programming版参与讨论
相关主题
EE找CS的工作求指教OOP"设计模式“,Java与Clojure代码对比
hadoop java 里面的SomeClass.class 是什么意思?哪里有各种设计模式的C++示例?
问个设计模式的问题吧,STL里面请推荐C++ design方面的书
问一个设计模式的问题老板嫌我C++太差!请推荐。
design patterns到底有用吗?c++越写越没有信心,觉得自己水平弱的不行
设计模式要不要搞?王垠 -- 拳打南山魏老 脚踢北海好虫
快速系统学习 c++ design pattern有什么好书或者网站吗请教: 如何提高CS基础
除了model view controller (mvc)这种pattern还有什么pattern流行?$3.95的Lisp In Small Pieces
相关话题的讨论汇总
话题: pattern话题: java话题: design话题: 设计模式话题: gof