代码改变世界

大家一起学面向对象设计模式系列Chapter 01 本系列介绍

2009-03-13 10:43  GUO Xingwang  阅读(2124)  评论(8编辑  收藏  举报

     大家好,几个月后我又开始写文章了,上一关于BlogEngine.Net的系列得到很多园友的支持,让我体会到了分享的快乐。这是我的新系列,主要是讲解GOF23种设计模式的文章。其实,这是一个被讲得很多的一个话题,博客园中关于设计模式的文章太多了,例如TerryLee的.NET设计模式系列等。不过好的东西不怕被讲烂,可能讲法不一样给大家带来的收获也不一样,对于我来说,其实基本上博客园中任何一篇文章都可以给我带来新的收获。

     我的这个系列对于那些大拿们可能觉得很无趣,但是对于一些刚刚接触设计模式,刚刚接触软件开发的新手们还是很有用的。设计模式是软件设计中很核心的知识,我刚开始接触时并没感到它到底牛在哪,时间久了就会发现它给你带来的震撼要比一般的技术多得多,经过再三思索,我决定本年度还是要把设计模式好好研究一下。

     为什么写这个系列

     干一件事总要有个目的吧!写文章也是,绝对不是三分钟热血,我写这个系列需要花费我很多的时间,总结起来目的有三:

1、主要想系统的学习一下设计模式(这里所说的设计模式特指面向对象的设计模式,下文类同)。要想灵活的应用设计模式,首先还是要深深的理解每种模式的原型,优缺点,适用的场景...,这样才能运用灵活。也就是说要想用好,就必须要学好(符合人类的认识世界和改造世界)。经过长久的设计与开发,我觉得设计模式是必须要掌握的,这才下定决心把它学好,掌握好,当然这里不是说要想掌握设计模式仅仅靠写几篇文章就可以实现的,文章也就是一个抛砖引玉的作用,更多系统的挖掘可能需要自己的领悟与实践。在这一系列中我会尽我最大的努力把每一种模式都写好,所以时间上可能不能一鼓作气。

2、分享给需要学习设计模式的园友们。如果你已经看了很多设计模式的文章,我相信你也会从这个系列中得到一定的收获。我这一系列主要是写给那些在设计模式门口徘徊的初学者的。尽量做到容易理解,讲解全面。

3、作为本人知识的积累,留在博客园中,我写的文章在我的电脑上其实没有做任何备份,我相信博客园可以永存。此外,这可能是我2009年唯一的一个系列。

     几个基本概念的区分

     模式:

     模式,即Pattern。其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需再重复相同的工作。模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。

     设计模式和面向对象的设计模式:

     设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式最初来源于建筑学。GOF(“四人帮”,指Gamma, Helm, Johnson & Vlissides, Addison-Wesley四人)的《设计模式》(1995年出版)是第一次将设计模式提升到理论高度,并将之规范化,本系列文章主要就是讲解这23种经典的设计模式。

     面向对象设计的模式,顾名思义,就是在面向对象分析与设计中使用的设计模式,GOF23种设计模式同时也是面向对象的设计模式,本文不做区分。良好的设计模式运用可以实现软件设计的“高内聚、低耦合”,提高软件的复用性和可扩展性。

     框架:

     框架,即Framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。

     架构:

     架构(Architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。架构是一个系统的草图。架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

     一些刚入门的程序员经常会混淆“框架”和“架构”这两个名词,这里做了一下解释。

     文章如何组织

     这个系列文章首先从面向对象软件设计的基本原则出发,然后对GOF23种设计模式进行一一讲解(讲解过程中先讲解模式原型,常见变型,典型应用和模式分析,最后小结),在讲解的过程中可能会从某个有名的开源项目中抽取出采用相应模式的源代码讲解,以了解模式在实际项目中的运用。最后做一个大的总结。在对每一种模式讲解的文章中可能会与其它模式进行对比。

     整个系列文章将采用C#代码作为演示,IDE采用vs2005或vs2008。此外阅读本系列文章需要对UML有少许了解。

     系列文章的主要参考文献

 1、http://www.dofactory.com
 2、博客园中相关文章.
 3、《Java与模式》阎宏博士.
 4、《设计模式》 GOF.
 5、李建忠老师的Webcast视频课程.

     Welcome to share your idea,thank you!欢迎分享您的想法,谢谢!

     大家一起学面向对象设计模式系列 索引贴