[b]根据最近热心读者的反馈[/b],这里列出来一些常见的设计模式的问题,进行解答。如何领悟设计模式中的面向对象思想,还是请下载[url=http://redhat.iteye.com/blog/1007884]《漫谈设计模式》[/url]
学习设计模式的一些常见问题
[b]1. 模式有没有标准形式?[/b]
GoF为了描述每一种设计模式,给它们定义了四个基本要素,旨在模式使模式能够得到广泛传播,这并不代表GoF给出的模式就是标准模式。事实上,他们也没有给每一种模式给出标准,而是很多地方给出了它们可能的变化,比如像组合(Composite)模式,有透明的组合模式,也有安全的组合模式,还例如观察者(Observer)模式,有push和pull两种形式。
这些设计模式只是为常见问题给出经验人士的一个参考方案,避免我们重复的发明轮子,而没有血统之分(哪个标准,哪个不标准),所以这个问题是个伪命题。
[b]2. 设计模式和OO什么关系?[/b]
设计模式最初引入的时候,正处于面向对象设计高速发展时期,那些模式都是来自成功的面向对象系统的某些部分,所以这23个最基本的模式都是关于面向对象的,但这不表示只有面向对象才有模式。我们知道,模式是是某一上下文环境中一个问题的常用解决方案,那么,SOA(Service-Oriented Architecture)可以有模式,Agile也可以有模式,OSGI(Open Services Gateway initiative)也有模式。
[b]3. 能不能创造新的设计模式?[/b]
完全可以,只要你能给一个上下文的问题给出一个通用的解决方案,并能使用GoF的四个基本要素描述它们。但是要避免重复的发明轮子,你必须了解你创造的是否已经存在,或者是否是已存在模式的变种。
[b]4. 学习了设计模式,就等于学会了设计?[/b]
学习设计模式只是借鉴OO专家的成功经验,要学会设计,还得向他们一样,学会使用OO的眼光看待问题,解决问题。这样,在解决问题的过程中,模式就会手到擒来,并且自然地变化它们以适应你的问题本身。
[b]5. 设计模式是OO设计的根本吗?[/b]
解决问题才是根本,模式只是关于解决问题的经验总结。笔者最初学习设计模式之后,以为优雅的设计就是尽可能的使用设计模式,所以在解决问题是刻意的套用它们,出现了一些拙劣的设计。后来读取了Eric Evans的《Domain-Driven Design: Tackling Complexity in the Heart of Software》一书,才意识到为领域建模的重要性,为解决问题,要为你的领域问题建立合理的模型,既然OO能够为软件编程带来巨大的变化,我们就要学会使用OO的眼光分析问题,享受OO给编程带来的莫大好处。
于是紧接着,在后来的一个软件开发中,我开始从问题本质入手,“忘却”模式,为问题提取模型,等设计开发完成之后,发现,我已经自然而然的使用了组合(Composite)模式和解释器(Interpreter)等模式。至此,我才意识到使用OO眼光分析问题的重要性,所以,这本书籍并不是单纯介绍模式的书籍,而是和大家一起探讨OOP,分析OOP给编程带来的好处,希望阅读完本书的人都能开始使用OO的眼光分析问题。
[b]6. 软件的核心是什么?[/b]
软件的核心是模型,为复杂领域问题提取精炼的模型是根本。我们要学会使用OO这把利器,借助它的眼光来分析问题解决问题,这样才能做出客户满意的软件。
学习设计模式的一些常见问题
[b]1. 模式有没有标准形式?[/b]
GoF为了描述每一种设计模式,给它们定义了四个基本要素,旨在模式使模式能够得到广泛传播,这并不代表GoF给出的模式就是标准模式。事实上,他们也没有给每一种模式给出标准,而是很多地方给出了它们可能的变化,比如像组合(Composite)模式,有透明的组合模式,也有安全的组合模式,还例如观察者(Observer)模式,有push和pull两种形式。
这些设计模式只是为常见问题给出经验人士的一个参考方案,避免我们重复的发明轮子,而没有血统之分(哪个标准,哪个不标准),所以这个问题是个伪命题。
[b]2. 设计模式和OO什么关系?[/b]
设计模式最初引入的时候,正处于面向对象设计高速发展时期,那些模式都是来自成功的面向对象系统的某些部分,所以这23个最基本的模式都是关于面向对象的,但这不表示只有面向对象才有模式。我们知道,模式是是某一上下文环境中一个问题的常用解决方案,那么,SOA(Service-Oriented Architecture)可以有模式,Agile也可以有模式,OSGI(Open Services Gateway initiative)也有模式。
[b]3. 能不能创造新的设计模式?[/b]
完全可以,只要你能给一个上下文的问题给出一个通用的解决方案,并能使用GoF的四个基本要素描述它们。但是要避免重复的发明轮子,你必须了解你创造的是否已经存在,或者是否是已存在模式的变种。
[b]4. 学习了设计模式,就等于学会了设计?[/b]
学习设计模式只是借鉴OO专家的成功经验,要学会设计,还得向他们一样,学会使用OO的眼光看待问题,解决问题。这样,在解决问题的过程中,模式就会手到擒来,并且自然地变化它们以适应你的问题本身。
[b]5. 设计模式是OO设计的根本吗?[/b]
解决问题才是根本,模式只是关于解决问题的经验总结。笔者最初学习设计模式之后,以为优雅的设计就是尽可能的使用设计模式,所以在解决问题是刻意的套用它们,出现了一些拙劣的设计。后来读取了Eric Evans的《Domain-Driven Design: Tackling Complexity in the Heart of Software》一书,才意识到为领域建模的重要性,为解决问题,要为你的领域问题建立合理的模型,既然OO能够为软件编程带来巨大的变化,我们就要学会使用OO的眼光分析问题,享受OO给编程带来的莫大好处。
于是紧接着,在后来的一个软件开发中,我开始从问题本质入手,“忘却”模式,为问题提取模型,等设计开发完成之后,发现,我已经自然而然的使用了组合(Composite)模式和解释器(Interpreter)等模式。至此,我才意识到使用OO眼光分析问题的重要性,所以,这本书籍并不是单纯介绍模式的书籍,而是和大家一起探讨OOP,分析OOP给编程带来的好处,希望阅读完本书的人都能开始使用OO的眼光分析问题。
[b]6. 软件的核心是什么?[/b]
软件的核心是模型,为复杂领域问题提取精炼的模型是根本。我们要学会使用OO这把利器,借助它的眼光来分析问题解决问题,这样才能做出客户满意的软件。