Redian新闻
>
谁对design pattern比较熟?
avatar
谁对design pattern比较熟?# JobHunting - 待字闺中
q*x
1
学习中。怎么觉得有点故弄玄虚?
singleton,全局只能有一个。用C++/Java静态类变量实现。似乎没啥内容。
iterator,就是smart pointer。
factory method,一个基类有多个衍类。创建指向衍类的基类指针时,用参数描述衍类
的类型,分别创建。这样的代码不好维护,所以把这部分工作封装到新类里。
我理解的对吗?
avatar
y*g
2
iterator和smart pointer完全不同吧,smart pointer是为了防止memory leak,
iterator是提供一个访问collection的方式。
没有太多project经验的话,
看的时候可以结合design principles一起看,比如open for extension but closed
for modification
http://www.oodesign.com/design-principles.html
也可以学习的时候想想现有的framework 比如j2ee, iPhone sdk等等是怎么应用这些
design pattern的,

【在 q****x 的大作中提到】
: 学习中。怎么觉得有点故弄玄虚?
: singleton,全局只能有一个。用C++/Java静态类变量实现。似乎没啥内容。
: iterator,就是smart pointer。
: factory method,一个基类有多个衍类。创建指向衍类的基类指针时,用参数描述衍类
: 的类型,分别创建。这样的代码不好维护,所以把这部分工作封装到新类里。
: 我理解的对吗?

avatar
f*t
3
iterator和smart pointer怎么会是一样的东西……
楼主你还是认真看吧……
avatar
D*e
4
design pattern是真正让我觉得编程有美感的东西,学的时候就觉得这样设计很
elegant,太聪明了
avatar
q*x
5
stl container的iterator不就是当smart pointer用吗?
我的理解,smart不仅体现在内存管理,还体现在数据的封装和保护。

【在 f*******t 的大作中提到】
: iterator和smart pointer怎么会是一样的东西……
: 楼主你还是认真看吧……

avatar
q*x
6

举几个例子?

【在 y*******g 的大作中提到】
: iterator和smart pointer完全不同吧,smart pointer是为了防止memory leak,
: iterator是提供一个访问collection的方式。
: 没有太多project经验的话,
: 看的时候可以结合design principles一起看,比如open for extension but closed
: for modification
: http://www.oodesign.com/design-principles.html
: 也可以学习的时候想想现有的framework 比如j2ee, iPhone sdk等等是怎么应用这些
: design pattern的,

avatar
y*g
7
那只能说你vocabulary和大多数人不一样,smart pointer一般来说不用来封装保护
stl的iterator只能说有类似pointer的语法

【在 q****x 的大作中提到】
: stl container的iterator不就是当smart pointer用吗?
: 我的理解,smart不仅体现在内存管理,还体现在数据的封装和保护。

avatar
y*g
8
每本书都有大量的例子,framework的文档也会说得很清楚,
我没法说的比他们更好
大概的 java的io是典型的decorator,几乎所有的gui的接近mvc
iphone中对design pattern的使用
http://developer.apple.com/library/ios/#documentation/Cocoa/Con

【在 q****x 的大作中提到】
:
: 举几个例子?

avatar
s*n
9

static variable的初始化是个大问题。

【在 q****x 的大作中提到】
: 学习中。怎么觉得有点故弄玄虚?
: singleton,全局只能有一个。用C++/Java静态类变量实现。似乎没啥内容。
: iterator,就是smart pointer。
: factory method,一个基类有多个衍类。创建指向衍类的基类指针时,用参数描述衍类
: 的类型,分别创建。这样的代码不好维护,所以把这部分工作封装到新类里。
: 我理解的对吗?

avatar
q*x
10
你说的“大多数”是基于经典教科书/论文吗?smart pointer这个词组的源头是?

【在 y*******g 的大作中提到】
: 那只能说你vocabulary和大多数人不一样,smart pointer一般来说不用来封装保护
: stl的iterator只能说有类似pointer的语法

avatar
y*g
11
google is your best friend

【在 q****x 的大作中提到】
: 你说的“大多数”是基于经典教科书/论文吗?smart pointer这个词组的源头是?
avatar
H*s
12
如果你没有大项目的经验,你是根本无法体会到design pattern的美感的,想出这些
pattern的人肯定是有相当多年丰富的project经验。 如果你整天就写个几百行顶大几
千行的程序那你可以不follow那些pattern, 但想象一下你要写个3万行的程序而且要
维护多年, 在设计阶段当中你就会体会到这些pattern简直就令人拍案叫绝啊, 原来
前辈们对这些设计问题早就有了一个系统的解决方案了。
具体问题楼上已经回答的很好了!
不过 in C++, smart pointer is an overloaded dereference operator (*, ->).
Iterator is a kind of mart pointer and it used the concept of smart pointer
but iterator is not only a smart pointer.

【在 q****x 的大作中提到】
: 学习中。怎么觉得有点故弄玄虚?
: singleton,全局只能有一个。用C++/Java静态类变量实现。似乎没啥内容。
: iterator,就是smart pointer。
: factory method,一个基类有多个衍类。创建指向衍类的基类指针时,用参数描述衍类
: 的类型,分别创建。这样的代码不好维护,所以把这部分工作封装到新类里。
: 我理解的对吗?

avatar
q*x
13
1st:
"In computer science, a smart pointer is an abstract data type that
simulates a pointer while providing additional features, such as
automatic garbage collection or bounds checking. These additional
features are intended to reduce bugs caused by the misuse of pointers
while retaining efficiency. Smart pointers typically keep track of the
objects they point to for the purpose of memory management."
2nd:
"Smart pointers are objects that look and feel like pointers, but are
smarter. What does this mean?
To look and feel like pointers, smart pointers need to have the same
interface that pointers do: they need to support pointer operations like
dereferencing (operator *) and indirection (operator ->). An object that
looks and feels like something else is called a proxy object, or just
proxy.
The proxy pattern and its many uses are described in the books Design
Patterns and Pattern Oriented Software Architecture."
So can you explain why stl iterator is not smart pointer?

【在 y*******g 的大作中提到】
: google is your best friend
avatar
y*g
14
你不用说服我,说服你的面试官就好了

【在 q****x 的大作中提到】
: 1st:
: "In computer science, a smart pointer is an abstract data type that
: simulates a pointer while providing additional features, such as
: automatic garbage collection or bounds checking. These additional
: features are intended to reduce bugs caused by the misuse of pointers
: while retaining efficiency. Smart pointers typically keep track of the
: objects they point to for the purpose of memory management."
: 2nd:
: "Smart pointers are objects that look and feel like pointers, but are
: smarter. What does this mean?

avatar
q*x
15
Sorry, my intention is not to persuade any one but learn new knowledge.

【在 y*******g 的大作中提到】
: 你不用说服我,说服你的面试官就好了
avatar
a*n
16
关键是面试官, 你理解的对不对无所谓
avatar
g*y
17
对Design Pattern的理解,是需要天份。Eric Gamma在一次采访里说,design pattern
不适合用来当教材学,所有的pattern都是你在大工程里体会到那种design pain的时候
,被逼出来的。
如果你都没有体会到痛,说明你的项目可能根本不需要这些pattern. 添加上去属于浪
费。
换句话说,在你没有痛之前,就远见卓识地预见到了,恭喜你,你确实比较有天份。
如果你觉得那些pattern没什么用,说明你的直觉跟很多人一致,不是什么错。
对系统设计的理解,我的感觉是:很难装,没有切身的体会,你从教科书上学来的,或
者背下来的,几句话就会被高手问穿。
我曾经以为很理解所有的pattern, 因为每一个我都知道它说的什么意思,我都可以给
你举出例子。但是具体到工程里的时候,它们并不是象血液一样自然流动,我就知道,
其实我没有真懂,它们没有融汇到我的血液里去。
最难的一点是,design pattern就象我们学数学一样,需要大量的练习。但是通常的公
司环境里,有几个人,有这种练习的机会呢?
对于那种拿着那本书读完,就能真懂的人,我很佩服。
avatar
H*s
18
火鸡的这番话我同意,的确很难仅从书本上就学懂design pattern,我的体会是最好在
看这本书的同时就做一个大的项目,这样就有了切身的体会,什么样的情况改用什么
pattern了。但是这仅仅修炼到了第一层,更深的体会是从长期维护一个软件得到的,
切身体会这些pattern的好处,并且使用合适的pattern改写必要部分的代码这是才是修
炼到了第二层。至于第三层,我不知道,谁能补充啊?

pattern

【在 g**********y 的大作中提到】
: 对Design Pattern的理解,是需要天份。Eric Gamma在一次采访里说,design pattern
: 不适合用来当教材学,所有的pattern都是你在大工程里体会到那种design pain的时候
: ,被逼出来的。
: 如果你都没有体会到痛,说明你的项目可能根本不需要这些pattern. 添加上去属于浪
: 费。
: 换句话说,在你没有痛之前,就远见卓识地预见到了,恭喜你,你确实比较有天份。
: 如果你觉得那些pattern没什么用,说明你的直觉跟很多人一致,不是什么错。
: 对系统设计的理解,我的感觉是:很难装,没有切身的体会,你从教科书上学来的,或
: 者背下来的,几句话就会被高手问穿。
: 我曾经以为很理解所有的pattern, 因为每一个我都知道它说的什么意思,我都可以给

avatar
g*y
19
第三层?手中无剑,心中有剑。
就象足球里的马拉多纳,最可怕的不是那些高光上完成的匪夷所思的动作,而是在大多
数时候,他能在最短的时间里用合理的动作衔接处理球,打击对方的薄弱环节。
软件设计里,最痛苦的地方就在:你需要不停地应对不断变化的情况。你怎么设计能够
使得整个框架在情况变化时,能够以比较小的代价应付变化。那些pattern就是总结常
见的经典思路。
到了这层的高手,脑子不拘泥在名词术语里,给出问题,他很快就能告诉你合理的方案
。不在乎这个解是否有个响亮的名字,关键是:在现实的约束条件下,这个解很有效,
易写易维护。
我见过很多人,侃起来一套一套的,但其实没什么底子,一旦真写就漏馅,相信大家都
碰到过不少这种人。所以就容易误认为设计就是侃。
遇到设计高手,人家很短时间就解了让你头疼的东西,那时你就会更深地体会什么是设
计。

【在 H****s 的大作中提到】
: 火鸡的这番话我同意,的确很难仅从书本上就学懂design pattern,我的体会是最好在
: 看这本书的同时就做一个大的项目,这样就有了切身的体会,什么样的情况改用什么
: pattern了。但是这仅仅修炼到了第一层,更深的体会是从长期维护一个软件得到的,
: 切身体会这些pattern的好处,并且使用合适的pattern改写必要部分的代码这是才是修
: 炼到了第二层。至于第三层,我不知道,谁能补充啊?
:
: pattern

avatar
d*e
20
同意...我们组那个小白,我简直就觉得他是编译器...一给他code review,一堆东西就
出来了

【在 g**********y 的大作中提到】
: 第三层?手中无剑,心中有剑。
: 就象足球里的马拉多纳,最可怕的不是那些高光上完成的匪夷所思的动作,而是在大多
: 数时候,他能在最短的时间里用合理的动作衔接处理球,打击对方的薄弱环节。
: 软件设计里,最痛苦的地方就在:你需要不停地应对不断变化的情况。你怎么设计能够
: 使得整个框架在情况变化时,能够以比较小的代价应付变化。那些pattern就是总结常
: 见的经典思路。
: 到了这层的高手,脑子不拘泥在名词术语里,给出问题,他很快就能告诉你合理的方案
: 。不在乎这个解是否有个响亮的名字,关键是:在现实的约束条件下,这个解很有效,
: 易写易维护。
: 我见过很多人,侃起来一套一套的,但其实没什么底子,一旦真写就漏馅,相信大家都

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。