论坛首页 Java企业应用论坛

学习设计模式的一些常见问题

浏览 18466 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-09-02  
根据最近热心读者的反馈,这里列出来一些常见的设计模式的问题,进行解答。如何领悟设计模式中的面向对象思想,还是请下载《漫谈设计模式》
学习设计模式的一些常见问题
1. 模式有没有标准形式?
GoF为了描述每一种设计模式,给它们定义了四个基本要素,旨在模式使模式能够得到广泛传播,这并不代表GoF给出的模式就是标准模式。事实上,他们也没有给每一种模式给出标准,而是很多地方给出了它们可能的变化,比如像组合(Composite)模式,有透明的组合模式,也有安全的组合模式,还例如观察者(Observer)模式,有push和pull两种形式。

这些设计模式只是为常见问题给出经验人士的一个参考方案,避免我们重复的发明轮子,而没有血统之分(哪个标准,哪个不标准),所以这个问题是个伪命题。
2. 设计模式和OO什么关系?
设计模式最初引入的时候,正处于面向对象设计高速发展时期,那些模式都是来自成功的面向对象系统的某些部分,所以这23个最基本的模式都是关于面向对象的,但这不表示只有面向对象才有模式。我们知道,模式是是某一上下文环境中一个问题的常用解决方案,那么,SOA(Service-Oriented Architecture)可以有模式,Agile也可以有模式,OSGI(Open Services Gateway initiative)也有模式。
3. 能不能创造新的设计模式?
完全可以,只要你能给一个上下文的问题给出一个通用的解决方案,并能使用GoF的四个基本要素描述它们。但是要避免重复的发明轮子,你必须了解你创造的是否已经存在,或者是否是已存在模式的变种。
4. 学习了设计模式,就等于学会了设计?
学习设计模式只是借鉴OO专家的成功经验,要学会设计,还得向他们一样,学会使用OO的眼光看待问题,解决问题。这样,在解决问题的过程中,模式就会手到擒来,并且自然地变化它们以适应你的问题本身。
5. 设计模式是OO设计的根本吗?
解决问题才是根本,模式只是关于解决问题的经验总结。笔者最初学习设计模式之后,以为优雅的设计就是尽可能的使用设计模式,所以在解决问题是刻意的套用它们,出现了一些拙劣的设计。后来读取了Eric Evans的《Domain-Driven Design: Tackling Complexity in the Heart of Software》一书,才意识到为领域建模的重要性,为解决问题,要为你的领域问题建立合理的模型,既然OO能够为软件编程带来巨大的变化,我们就要学会使用OO的眼光分析问题,享受OO给编程带来的莫大好处。

于是紧接着,在后来的一个软件开发中,我开始从问题本质入手,“忘却”模式,为问题提取模型,等设计开发完成之后,发现,我已经自然而然的使用了组合(Composite)模式和解释器(Interpreter)等模式。至此,我才意识到使用OO眼光分析问题的重要性,所以,这本书籍并不是单纯介绍模式的书籍,而是和大家一起探讨OOP,分析OOP给编程带来的好处,希望阅读完本书的人都能开始使用OO的眼光分析问题。
6. 软件的核心是什么?
软件的核心是模型,为复杂领域问题提取精炼的模型是根本。我们要学会使用OO这把利器,借助它的眼光来分析问题解决问题,这样才能做出客户满意的软件。
   发表时间:2011-09-02  
我是一个比较低俗人
哈哈,一个软件的成功与否,是看这个软件的好评度,客户不会关心你用什么设计模式,用什么技术,他会考虑满足不满足需求。
大家都觉得面向接口编程好,但是也有一些不面向接口编程的案例,所以说没有模式也能做出好的东西,非要把代码起成一个文雅的名字
0 请登录后投票
   发表时间:2011-09-02   最后修改:2011-09-02
楼上的话太精辟了。
模式不就是一段很普通的代码么???

我见很多人都在盲目的追求设计模式,说代码这应该用什么模式那应该用什么模式。
恰恰就丢失了楼上所描述的重要东西。
0 请登录后投票
   发表时间:2011-09-02   最后修改:2011-09-02
谢谢楼上的夸奖
那不止是精辟了,完全是屁精了,嘎嘎,哈哈
0 请登录后投票
   发表时间:2011-09-02  
上面几位,弄清楚“目标”与“手段”,恐怕也就不会有那样的回复了。

LZ说东,你们却说西。
0 请登录后投票
   发表时间:2011-09-02  
sunheavenvan 写道
上面几位,弄清楚“目标”与“手段”,恐怕也就不会有那样的回复了。

LZ说东,你们却说西。

我们只是对我们自己理解的设计模式发表一下自己看法。
你所说的“手段”不就是想指模式么?
0 请登录后投票
   发表时间:2011-09-02  
手段是什么,并不是我主要观点。

我想说出的是,看清楚论题、议题方向再回复,LZ从在谈手段,你们却谈目标,或者说在用户的角度谈“客户不会关心你用什么设计模式”,“非要把代码起成一个文雅的名字 ”等……

LZ说前门楼子,你们却说胯骨轴子。这……唉,算了,旁观期待更有价值的回复
1 请登录后投票
   发表时间:2011-09-02  
sunheavenvan 写道

手段是什么,并不是我主要观点。

我想说出的是,看清楚论题、议题方向再回复,LZ从在谈手段,你们却谈目标,或者说在用户的角度谈“客户不会关心你用什么设计模式”,“非要把代码起成一个文雅的名字 ”等……

LZ说前门楼子,你们却说胯骨轴子。这……唉,算了,旁观期待更有价值的回复


敢问下楼上的兄弟‘楼主’表达的什么意思呢,他是不是也在说‘学习设计模式的一些常见问题’

我针对他说的问题发表个人看法跑题了么?

我好想没有说’今天挺不错的啊,确实很不错,我们少说废话吧,我们不要说废话,这样儿无聊的话吧

要不然你理解有问题,要不然我理解有问题

肯定又有一个人有问题

0 请登录后投票
   发表时间:2011-09-02  
redhat 写道
于是紧接着,在后来的一个软件开发中,我开始从问题本质入手,“忘却”模式,为问题提取模型,等设计开发完成之后,发现,我已经自然而然的使用了组合(Composite)模式和解释器(Interpreter)等模式。至此,我才意识到使用OO眼光分析问题的重要性,所以,这本书籍并不是单纯介绍模式的书籍,而是和大家一起探讨OOP,分析OOP给编程带来的好处,希望阅读完本书的人都能开始使用OO的眼光分析问题。


正是学习模式的最佳实践, 需要不断的积累才能达到的境界.
1 请登录后投票
   发表时间:2011-09-02  
讲的相当在理,站在领域模型高度分析问题,潜移默化的把多种设计模式应用于实现上,这个挺好。这个应该具备设计模式的整体把握,分析问题上还需要OO的眼光。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics