25.关于设计模式的一些事

来源:互联网 发布:seo查询方法包括 编辑:程序博客网 时间:2024/05/17 05:58

这里并不是全部

从第15章开始,我们已经接触到了12种设计模式,但这并不是设计模式的全部;在《设计模式:可复用面向对象软件的基础》一书中,设计模式四人组(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)共为我们精心组织了23种设计模式,这些模式的名录请参考本书的附录六,就是本书的最后部分,你可以从本书的最后面翻看,很快就能找到。当然,如果你的C++够强,还可以直接看一看原著。

也许你会认为这23种设计模式就是全部,但它们仍然不是。我们在第15章开始就说过,设计模式是被发现出来的,而不是凭空想像出来的;所以,你大可不必坐在那里想像自己能够创造出一种设计模式。但是,你却可以在不断的学习、开发和积累中,不断的总结经验,也许有一天就可以找到并总结出新的适合解决某种问题的设计模式。

但是,找到设计模式并不是我们的目的,应用设计模式同样也不是我们的目的(这一点也请不要惊讶)。那么,我们讨论了这么久的设计模式,目的何在呢?

同样是在第15章,在对设计模式概念的介绍中,我们就说过,设计模式只是组织代码功能与架构的方法,而不是代码本身;也就是说,设计模式并不能让我们真正地实现软件功能,而是帮助我们高效的、灵活的组织项目中的代码。在软件开发中,最重要的角色依然是代码

下面就请本书中代码方面的代表VB.NET来讲一讲关于设计模式与他之间的一些故事。

 

代码眼中的设计模式

Hi!大家好,我是VB.NET,全名Visual Basic .NET;在第1章,作者已介绍过相关内容了,大家都知道,我还有个远房亲戚是VB。其实,我和设计模式在同一本书中出现还真的不多见,心里多少还是会有点紧张的。

现在VB已经很少出门了,今天,他也没有来窜门;幸好是这样,不然让他听到设计模式一定会有点不好意思的。这是为什么呢?

你得知道,VB使用的并不是真正的面向对象(OO)的开发语言,虽然他也有类,但那真的不能做太多的事;他的类就是孤零零的类,没有共享成员、不能继承、不能重载方法等等,他甚至没有接口的概念,……

好了,我并不是在说自己亲戚的坏话,我只是实话实说罢了。不过,话又说过来,毕竟VB已经是上个世纪的开发工具了,在那个年代,他在自己的领域里还是非常强大的,这一点恐怕是谁也不能否认。

现在说说我自己吧。我已经被打造成了真正的面向对象开发战士,面向对象开发技术中最重要的概念,我都可以轻松实现,比如:抽象、封装、多态、继承。

可能是因为我已经变得足够强大,所以,有个叫“设计模式”的家伙就很自然地找上门了,他说会让我更强大。在一开始,我还真有点儿不太相信,要知道我已经具备了作为一名真正的面向对象开发战士所需要的一切,还有什么问题解决不了呢,况且我还有强大的开发资源——.NET Framework类库的大力支持?

但实际上,你也看到了,本书前面的一些开发例子中,在只使用面向对象概念的情况下还真地会有些麻烦,特别是在软件架构比较复杂的时候;在这个时候,我开始相信设计模式说的话了,虽然我没有见过叫作“设计模式”的代码,但他却用一只无形的手将软件中的代码整理的井井有条,在修改或扩展软件功能时也变得更灵活。

后来,我也发现,软件的实现过程实际上还是由我来完成的,而设计模式这位仁兄只是帮我指点了几招,我记得最清楚的就是:

l         多组合,少继承。要知道,继承可是面向对象开发中最重要的概念之一;现在,却让我们少用。可我终于发现,组合的威力确实要比继承大的多,感谢所有人,我有了接口(Interface)的概念,否则的话,我是没有太好的办法进行对象的组合。你可以回头找一找,有多少模式中使用了接口,或者你想省点事,干脆找找有多少模式没有使用接口罢了。

l         多扩展,少修改。这点相信没有人否认,要知道需求的变化,代码无止尽地修改,这些都是开发人员心中永远的痛。利用设计模式的基本概念,我们可以将项目中不易变化的部分和可能变化的部分分开,利用组合扩展来应对不断的需求改变。

当然,设计模式还有很多招式;而我记得最清楚就是这两个最基本的口诀了,关于更多使用设计模式的要诀还是请参考本书相关的部分吧。

谢谢大家!

 

如何使用设计模式

用不用?怎么用?这两个问题应该是应用设计模式最重要的两个问题了。

也许你会说,难道我们学习了这么多的设计模式,不应该广泛地去使用他们吗?我想,正确的回答应该是:“视情况而定。”。我们说过,发现和使用设计模式都不是最终的目的,我们的目的只是如何开发出好的软件,如何构建高效、灵活的代码库。如果不使用设计模式就可以将项目做的很漂亮,那你尽管不去使用设计模式。

还有一点你需要知道,在项目的一开始就能准确应用设计模式也是有一定难度的。设计模式的应用并不是我们强加于软件,而是很自然融入到代码的构建过程之中。也许,有可能你已经在项目中使用了设计模式,自己却还不知道;你可以先熟悉一下所有的设计模式名录,再看看过去的项目代码,也许你就能发现某种,甚至多种设计模式的踪迹了。当你需要开发某个软件第二个版本的时候,你可能需要重构一些代码库,这时,你可能就会对设计模式的应用有着更深入地认识。我们常说:代码重构的过程就是在代码中融入设计模式的过程

当我们在一个架构中使用了一种设计模式后,并没有必要排除其他的设计模式;要知道,设计模式之间并不是敌人,他们之间合作起来经常起到1+1>2的神奇效果。所以,如果在你的项目中需要同时使用多个设计模式,那就用吧,这种情况甚至还有一个名字,我们称之为复合模式

最后,设计模式并不是教条,如果你决定使用他们时,并不需要完全按照书本中的结构来实现,你完全可以根据实际情况灵活地修改或简化这些模式。

 

More…

读完本书,如果你有时间可以再读一读以下两本关于设计模式的书:

《设计模式:可复用面向对象软件的基础》,作为在软件中应用设计模式的开山之作,他还是很经典的。不过,对于VB.NET的程序员来说,这本书使用编程语言的是C++,你可以从中了解不使用接口(Interface)如何实现设计模式(因为C++没有接口,J);在这本书中的例子可能也不是那么有娱乐性;读起来可能需要一些耐心。

《Head First 设计模式》,这本书读起来可能会有趣的多,但他使用的编程语言是Java;还有一点,书中的例子都是很美国化的;所以,对于一些小故事、小幽默,你还需要在了解一些美国文化的基础上才能明白。

 

好的,以上两本书也是我学习和使用设计模式的良师益友,我会不时的将他们拿出来翻一翻,有时还真的会有意外的收获。可能也是由于上面介绍的这两种书的一些特点,才让我想到使用VB.NET来介绍设计模式的应用,因为我是从VB一路用到VB.NET的;现在看来,在VB.NET中应用设计模式是没有任何问题的。

在这里,祝广大的.NET程序员,特别是VB.NET程序员们,在软件开发的过程中玩的开心!

 

一名普通的VB程序员  敬奉

 

 

出自:http://www.caohuayu.com/books/B0003/B0003.aspx

原创粉丝点击