.NET与设计模式[按需印刷]
基本信息
编辑推荐
本书力求将设计模式与实际开发紧密联系起来,具体讲述了哪种模式可以在哪种现实的应用场景中采用。全书融入了作者多年的开发经验,介绍了许多现实案例,具有很强的实用性。
内容简介回到顶部↑
本书力求将设计模式与实际开发紧密联系起来,具体讲述了哪种模式可以在哪种现实的应用场景中采用。全书融入了作者多年的开发经验,介绍了许多现实案例,具有很强的实用性。本书分为4篇:第1篇讲述了面向对象设计的一些基本原则和.net引入的新概念;第2篇以gof的23种设计模式为主线用相当多的实例介绍了每一种设计模式的引入原因、动机、使用环境、结构及其收益与代价;第3篇介绍设计模式在dotnetnuke、nunit、ndoc和gentle等开放源码中的应用;第4篇介绍了有关模式的历史,如何发现和书写模式,以及模式社会的交流场所plop等。
本书适合所有程序员及相关技术开发人员阅读。
本书适合所有程序员及相关技术开发人员阅读。
目录回到顶部↑
第1章 理解设计模式 3
1.1 模式的定义 3
1.2 gof的设计模式与模式 5
1.3 理解设计模式的名称 5
1.3.1 工厂与工厂方法 6
1.3.2 生成器与生成器模式 6
1.3.3 桥接与桥接模式 6
1.3.4 状态与状态模式 6
1.3.5 适配器与适配器模式 6
1.3.6 装饰器和装饰器模式 7
1.3.7 代理和代理模式 7
1.4 理解设计模式的场景 7
1.5 理解设计模式中的作用力 9
1.6 理解设计模式的结果和代价 9
1.6.1 对象过多 9
1.6.2 更复杂的装配关系 9
1.6.3 测试难度加大 10
1.6.4 程序结构复杂 10
1.7 设计模式不能做什么 10
1.7.1 设计模式不是法则 10
1.1 模式的定义 3
1.2 gof的设计模式与模式 5
1.3 理解设计模式的名称 5
1.3.1 工厂与工厂方法 6
1.3.2 生成器与生成器模式 6
1.3.3 桥接与桥接模式 6
1.3.4 状态与状态模式 6
1.3.5 适配器与适配器模式 6
1.3.6 装饰器和装饰器模式 7
1.3.7 代理和代理模式 7
1.4 理解设计模式的场景 7
1.5 理解设计模式中的作用力 9
1.6 理解设计模式的结果和代价 9
1.6.1 对象过多 9
1.6.2 更复杂的装配关系 9
1.6.3 测试难度加大 10
1.6.4 程序结构复杂 10
1.7 设计模式不能做什么 10
1.7.1 设计模式不是法则 10
前言回到顶部↑
设计模式是面向对象编程的热门话题之一,越来越多的开发人员认识到设计模式的重要性,愿意花大量的时间学习它。采用各种语言实现设计模式的文章也越来越多,但是很多开发人员发现很难将设计模式与实际开发中需要解决的具体问题相联系。因为使用设计模式的难点往往不在于模式的实现,而在于很难确定哪种模式可以在现实的应用场景中采用,从而导致了在现实的项目中,面对客户的压力、老板的指责和无休止的加班时,我们总是采用最直截了当的方法解决问题,来不及过多考虑这些方法的优劣,即使明知将带来更大的麻烦也必须如此。有些时候则因为选择了不恰当的设计模式,使原本简单的问题变得复杂化。
总是有些优秀的设计人员可以在同样短的时间内做出正确的判断,他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是平时刻苦修炼的结果。
因此我们需要解决的问题是将设计模式变为经验和直觉,这样确实有些困难。因为这需要对设计模式有深刻的理解,还需要有大量的编程实践作为基础,而二者本身也是相辅相成的。如何快速地掌握设计模式并真正地变为护身武器,是笔者一直试图解决的问题。
怎样掌握设计模式
笔者认为,掌握设计模式需要解决如下问题。
(1)正确理解设计模式。
模式所关注的不仅是重复的解决方案,更主要的是关注重复出现的应用场景和与场景相关的各种作用力。很多使用设计模式失败的原因,并不是实现设计模式的方法有问题,而是采用的设计模式不适合应用场景。这往往导致设计过度,使软件变得复杂,进而丧失对使用设计模式的信心。
(2)编程语言与设计模式的实现。
尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式。GOF的《设计模式》是经典之作,但毕竟距现在已经十几年了。这个期间开发平台已经进化了多代,很多新技术已经应用到编程中。有些技术可以简化设计模式的实现,有些技术已经采用了设计模式。因此,学习设计模式必须针对所使用的编程语言和开发平台。一定要注意,不是将《设计模式》中的例子转换为C#或者其他语言就等于知道如何实现设计模式了,而是要关注设计模式的精髓,并结合具体的语言特点完成其实现。就.NET而言,很多技术可以简化设计模式的实现,例如,采用反射技术实现工厂和采用委托技术实现模板方法等,这些技术在本书相关章节中都有详细讨论。
(3)在实践中使用设计模式。
这是最重要的,仅靠背棋谱成不了围棋高手。只是在概念上理解设计模式而不实现,同样成不了架构设计师。在进行软件设计时,要有意识地问自己使用还是不使用设计模式,不要匆忙下结论。重视软件质量的改进,如果有可能,则在项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是很值得学习的。
这里需要注意的是,一定不要照搬教科书上的例子。
在实践中使用设计模式
(1)需求驱动。
需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。
设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用模式而使用模式。在不合适的场合生搬硬套地使用模式反而会使设计变得复杂,使软件难以调试和维护。
(2)分析成功的模式应用项目。
对现有的应用实例进行分析是学习模式的一个很好的途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。
“置之死地而后生”可以说是一种解决方案,而不是模式,或者说仅仅给出了模式的实现,而没有交代使用的场合。项羽采用这个方案把秦军打败了,但马谡却丢了街亭。
有很多开放源码的项目可以作为学习的实例,本书的第3篇列举了多个开源项目的实例来说明设计模式的应用。
总是有些优秀的设计人员可以在同样短的时间内做出正确的判断,他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是平时刻苦修炼的结果。
因此我们需要解决的问题是将设计模式变为经验和直觉,这样确实有些困难。因为这需要对设计模式有深刻的理解,还需要有大量的编程实践作为基础,而二者本身也是相辅相成的。如何快速地掌握设计模式并真正地变为护身武器,是笔者一直试图解决的问题。
怎样掌握设计模式
笔者认为,掌握设计模式需要解决如下问题。
(1)正确理解设计模式。
模式所关注的不仅是重复的解决方案,更主要的是关注重复出现的应用场景和与场景相关的各种作用力。很多使用设计模式失败的原因,并不是实现设计模式的方法有问题,而是采用的设计模式不适合应用场景。这往往导致设计过度,使软件变得复杂,进而丧失对使用设计模式的信心。
(2)编程语言与设计模式的实现。
尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式。GOF的《设计模式》是经典之作,但毕竟距现在已经十几年了。这个期间开发平台已经进化了多代,很多新技术已经应用到编程中。有些技术可以简化设计模式的实现,有些技术已经采用了设计模式。因此,学习设计模式必须针对所使用的编程语言和开发平台。一定要注意,不是将《设计模式》中的例子转换为C#或者其他语言就等于知道如何实现设计模式了,而是要关注设计模式的精髓,并结合具体的语言特点完成其实现。就.NET而言,很多技术可以简化设计模式的实现,例如,采用反射技术实现工厂和采用委托技术实现模板方法等,这些技术在本书相关章节中都有详细讨论。
(3)在实践中使用设计模式。
这是最重要的,仅靠背棋谱成不了围棋高手。只是在概念上理解设计模式而不实现,同样成不了架构设计师。在进行软件设计时,要有意识地问自己使用还是不使用设计模式,不要匆忙下结论。重视软件质量的改进,如果有可能,则在项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是很值得学习的。
这里需要注意的是,一定不要照搬教科书上的例子。
在实践中使用设计模式
(1)需求驱动。
需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。
设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用模式而使用模式。在不合适的场合生搬硬套地使用模式反而会使设计变得复杂,使软件难以调试和维护。
(2)分析成功的模式应用项目。
对现有的应用实例进行分析是学习模式的一个很好的途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。
“置之死地而后生”可以说是一种解决方案,而不是模式,或者说仅仅给出了模式的实现,而没有交代使用的场合。项羽采用这个方案把秦军打败了,但马谡却丢了街亭。
有很多开放源码的项目可以作为学习的实例,本书的第3篇列举了多个开源项目的实例来说明设计模式的应用。
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· InfoQ中文站论坛:.NET讨论区(InfoQ .NET)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· WCF的开山之作 WCF画卷的清明上河图(WCF WF WPF)


点击看大图





加载中...

