C# 3.0设计模式
基本信息
- 原书名: C# 3.0 Design Patterns
- 原出版社: O'Reilly Media, Inc.
- 作者: (南非)Judith Bishop [作译者介绍]
- 译者: 王江平
- 丛书名: 北京华章图文信息有限公司O'Reilly系列
- 出版社:机械工业出版社
- ISBN:9787111250807
- 上架时间:2008-12-29
- 出版日期:2009 年1月
- 开本:16开
- 页码:294
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > C#
编辑推荐
“本书为那些充满奥秘的设计模式提供了有效的C#3.0实现。”
——C#编译器开发组资深开发者Eric Lippert
内容简介回到顶部↑
如果想加速.net应用程序的开发,你就需要本书,它是解决常见编程问题的优雅的、公认的和被证明为有效的处理方式的合集。本书条理清晰地介绍了经典的面向对象设计模式,并解释了怎样运用最新的c#3.0语言特性来编写它们。
c#设计模式利用新的c#3.0语言和.net 3.5框架中的特性来实现开发社区中广为人知的23种设计模式。本书包含了揭示每种模式在实际中如何运用的丰富案例,以及对于模式及其最佳使用场合和最佳组合方式的富有洞察力的比较。本书结构清晰、示例丰富,涵盖以下内容:
· 介绍设计模式以及为什么使用它们,其中的表格和使用指导可以帮助你从多种模式中选出想要 的模式。
· 各种经典设计模式的演示,包括创建型模式、结构型模式和行为型模式,还有每种模式的uml表示以及其中各参与者所扮演的角色。
· 从示例中引入c#3.0语言特性,并在文本框中对它们进行总结,以方便引用。
· 每个模式的示例都是实际可运行的.net 3.5程序,可以从o’reilly网站和作者的配套网站上下 载。
· 检验你是否理解书中内容的小测试和练习。
在本书中,你将学习如何编写正确、可扩展和高效的代码,以节省前期的开发时间,消除后期的软件问题。
c#设计模式利用新的c#3.0语言和.net 3.5框架中的特性来实现开发社区中广为人知的23种设计模式。本书包含了揭示每种模式在实际中如何运用的丰富案例,以及对于模式及其最佳使用场合和最佳组合方式的富有洞察力的比较。本书结构清晰、示例丰富,涵盖以下内容:
· 介绍设计模式以及为什么使用它们,其中的表格和使用指导可以帮助你从多种模式中选出想要 的模式。
· 各种经典设计模式的演示,包括创建型模式、结构型模式和行为型模式,还有每种模式的uml表示以及其中各参与者所扮演的角色。
· 从示例中引入c#3.0语言特性,并在文本框中对它们进行总结,以方便引用。
· 每个模式的示例都是实际可运行的.net 3.5程序,可以从o’reilly网站和作者的配套网站上下 载。
· 检验你是否理解书中内容的小测试和练习。
在本书中,你将学习如何编写正确、可扩展和高效的代码,以节省前期的开发时间,消除后期的软件问题。
作译者回到顶部↑
本书提供作译者介绍
Judith Bishop是南非比勒陀利亚大学计算机科学系教授。她专注于编程语言在分布式系统中的应用以及基于Web的技术。她是新技术的倡导者,所著Java和C#方面的书籍以6种语言在全世界发行。Judith是IFIP(International Federation for Information Processing,国际信息处理联合会)TC2(软件)的南非代表,她还是多个国际会议委员会及编委会的主席或成员。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
序言
前言
第1章 c#与设计模式
关于模式
关于uml
关于c#3.o
关于示例
第2章 结构型模式之装饰器、代理与桥接
装饰器模式
代理模式
桥接模式
示例:openbook
模式比较
第3章 结构型模式之组合与享元
组合模式
享元模式
模式比较
第4章 结构型模式之适配器与外观
适配器模式
外观模式
前言
第1章 c#与设计模式
关于模式
关于uml
关于c#3.o
关于示例
第2章 结构型模式之装饰器、代理与桥接
装饰器模式
代理模式
桥接模式
示例:openbook
模式比较
第3章 结构型模式之组合与享元
组合模式
享元模式
模式比较
第4章 结构型模式之适配器与外观
适配器模式
外观模式
译者序回到顶部↑
这本书是基于3.0版的C#语言来讲解设计模式的。模式依然是那23个最经典的面向对象设计模式,即Gamma等人1995版《Design Patterns:Element of Reusable Object-Oriented Software》(编注1)一书中讲到的模式。但老瓶装上新酒,却也透出一些新味道,主要“新”在:
1.正如书名所言,本书是基于C#语言的,本书所有的示例程序全部基于C#语言及.NET框架,这一点跟95版《设计模式》不同,在那本书里,示例代码以C++语言为主,辅以SmallTalk。许多C#程序员不熟悉那些语言,所以本书显然更适合C#程序员。.
2.本书在讲解设计模式的同时,也讲解了许多C#语言特性(有25种之多),特别是C# 3.0的新特性。这可以使读者在学习设计模式的过程中进一步加深对语言特性的理解。
3.本书采用的示例代码基于C#语言及其新特性,而C#语言的许多高级特性为模式设计提供直接支持,比如yield return和IEnumerable接口直接支持迭代器(Iterator)模式,克隆和序列化则可简化备忘录(Memento)模式的设计。
4.本书采用的示例是全新的,它们更接近当前软件行业的前沿。这些示例使本书对模式的讲解更加深入浅出。译者个人认为,在个别模式上本书的讲解不亚于95版《设计模式》,比如对解释器(Interpreter)和享元(Flyweight)模式的讲解。..
虽然人们一般认为编程思想高于语言,但编程语言和设计模式却总是相互影响:一方面,合理地运用设计模式可以充分发挥出语言功能的强大威力;另一方面,语言对设计模式支持的程度越高,模式就更容易被正确使用和推广。本书的一大特色就是将这一理念渗透在全书中。结尾处还介绍了C#语言在这方面所做的努力以及未来的发展方向。
在翻译本书的过程中,译者根据作者在配套网站(http://patterns.cs.up.ac.za/)上的勘误进行了更正。
特别感谢来自CSDN的网友张磊(网名xuelong_zl一点雨点),他不辞辛苦,一字不漏地复审了全书的译稿,协助查出了初稿中不少的错别字、病句,并对原稿中许多晦涩的译句提出了修改意见。此外,还要感谢另一名来自CSDN的网友高远(网名:Wolf0403-完美废人),他协助推敲了个别疑难句子的翻译。正是有了以上两位的协助,本书的翻译质量才得到进一步的保障。
最后还要感谢我亲爱的妹妹,多少次敲打键盘到深夜,她总会倒一杯甘甜的果汁放在我电脑的旁边。
客套话就不说了,译者已使出浑身解数,有优点您多吹捧,有缺点您就狠狠地批吧。...
王江平
2008年5月写于上海浦东
1.正如书名所言,本书是基于C#语言的,本书所有的示例程序全部基于C#语言及.NET框架,这一点跟95版《设计模式》不同,在那本书里,示例代码以C++语言为主,辅以SmallTalk。许多C#程序员不熟悉那些语言,所以本书显然更适合C#程序员。.
2.本书在讲解设计模式的同时,也讲解了许多C#语言特性(有25种之多),特别是C# 3.0的新特性。这可以使读者在学习设计模式的过程中进一步加深对语言特性的理解。
3.本书采用的示例代码基于C#语言及其新特性,而C#语言的许多高级特性为模式设计提供直接支持,比如yield return和IEnumerable接口直接支持迭代器(Iterator)模式,克隆和序列化则可简化备忘录(Memento)模式的设计。
4.本书采用的示例是全新的,它们更接近当前软件行业的前沿。这些示例使本书对模式的讲解更加深入浅出。译者个人认为,在个别模式上本书的讲解不亚于95版《设计模式》,比如对解释器(Interpreter)和享元(Flyweight)模式的讲解。..
虽然人们一般认为编程思想高于语言,但编程语言和设计模式却总是相互影响:一方面,合理地运用设计模式可以充分发挥出语言功能的强大威力;另一方面,语言对设计模式支持的程度越高,模式就更容易被正确使用和推广。本书的一大特色就是将这一理念渗透在全书中。结尾处还介绍了C#语言在这方面所做的努力以及未来的发展方向。
在翻译本书的过程中,译者根据作者在配套网站(http://patterns.cs.up.ac.za/)上的勘误进行了更正。
特别感谢来自CSDN的网友张磊(网名xuelong_zl一点雨点),他不辞辛苦,一字不漏地复审了全书的译稿,协助查出了初稿中不少的错别字、病句,并对原稿中许多晦涩的译句提出了修改意见。此外,还要感谢另一名来自CSDN的网友高远(网名:Wolf0403-完美废人),他协助推敲了个别疑难句子的翻译。正是有了以上两位的协助,本书的翻译质量才得到进一步的保障。
最后还要感谢我亲爱的妹妹,多少次敲打键盘到深夜,她总会倒一杯甘甜的果汁放在我电脑的旁边。
客套话就不说了,译者已使出浑身解数,有优点您多吹捧,有缺点您就狠狠地批吧。...
王江平
2008年5月写于上海浦东
前言回到顶部↑
我为什么写这本书
2002年,微软研究院(Microsoft Research)在英国的剑桥主持了一次国际会议,在这次会议上,微软展示了它的Rotor系统,这个系统将C#和.NET带给了非Windows程序员。会议结束之后,我回到家开始编写相关软件、论文和书,这一过程中我意识到:我们已经见证了一轮真正的程序设计革命的开始。自1996年Java出现以来,程序设计变得平台独立:通过Java的字节码,程序可以到处运行。然而,这种独立性只适用于Java编写的程序。与此不同的是,.NET是独立于语言的:它允许不同语言编写的程序彼此交互,只是在那一天到来之前,这仅限于Windows系统。.
在后面的五年里,出现了新的支持.NET的平台(比如Mono)以及新的支持Intel芯片的硬件(Windows跑在Intel芯片上)。结果就是,如今.NET也几乎可以到处运行了。于是,C#程序设计也成了一门可移植的编程技术。但作为一门语言,C#一直在改进,现在我们处在了向3.0飞跃的起始点上,为带来更高的生产率和更好的易用性,C# 3.0提供了大量有用的新特性。我在2003年写过一本介绍C#语言的书,4年后(2007年)发布的新特性所带来的好处,使我觉得C# 3.0将软件开发推向了一个更高的层次。我曾经想再写一本书,把C# 3.0介绍给那些已经掌握语言基础的开发者,但采用何种的形式才能更好的介绍一种编程语言,同时满足读者在精确性、示例方面的要求以及大量的现实性需求呢?
我想到了设计模式。设计模式封装了综合运用语言特性来解决问题的一般的、公认的和有效的方法。它们提升了讨论的层次,实现并发展了好的编程方法。然而,设计模式总带给人们一些不现实的感觉,人们对设计模式的印象常常是:讨论得多,用得少。我想改变这一点,借助于为他们准备的最好的编程语言:C# 3.0,让普通的开发者也真正理解设计模式。
本书为谁而写
如果你是一个钟爱自己代码的程序员,想让代码的每一行都有准确的含义,每一个特性都用在正确的场合中,这本书就是为你准备的。它将帮助你完成最基本的工作:使你的代码正确、优雅、可扩展而且高效。如果你在公司里的负责代码质量,你也需要一本像《C# 3.0设计模式》这样的书。对于那些致力于成为软件工程师或架构设计师的低层程序开发者,掌握设计模式的知识也是一大进步。
通过阅读本书,你可以掌握以下技能:
*设计模式编程;
*用来描述模式的基本UML建模表示法;
*选择适合于特定情形的模式,并比较不同的实现方式;
*使用C# 3.0的高级语言特性来高效、优雅地实现模式。
尽管本书并没有被写成一本教科书,它完全可以用于设计模式和高级程序设计方面的中级课程。
本书中所有模式及相关示例的图、代码和研究案例都可以从本书的网站下载:http://www.oreilly.com/catalog/9780596527730
阅读本书需要的知识
本书是为这种程序员准备的:至少了解C# 1.0或Java1.4程序设计并希望进一步转到最新版本的语言上,使用更加现代化的特性进行程序开发。C# 3.0的所有新特性,以及许多来自于C# 2.0的较新颖的特性,在本书中都通过示例做了介绍,为方便引用,本书还在注释文字中进行了总结。因此,本书也可以作为语言的使用指南。
本书并不要求读者熟悉设计模式。它已涵盖了全部23种经典模式。这23种模式是Erich Gamma、Richard Helm、Ralph Johnson 和John Vlissides四人于1994年在他们的《Design Patterns: Elements of Reusable Object-Oriented Software》(中文书名《设计模式:可复用面向对象软件的基础》)中提出的,而且现在已成为其它领域(如安全、并发和框架程序设计)中出现的新模式的基础。看完本书,读者将深入掌握设计模式基础,就像大多数人所理解的那样。
本书是如何组织的
第1章是综述,在之后的章节中本书详细介绍了23种核心设计模式。每一章介绍两到三种模式,选择的依据是相似的可用性,这样,在同一章的末尾可以将它们进行比较。所有这些模式被分成3组:结构型模式、创建型模式和行为型模式。
我们从结构型模式开始,第2章学习装饰器(Decorator)模式,代理(Proxy)模式和桥接(Bridge)模式;第3章学习组合(Composite)模式和享元(Flyweight)模式;第4章学习适配器(Adapter)模式和外观(Facade)模式。然后我们转向创建型模式,第5章探讨原型(Prototype)模式、工厂方法(Factory Method)模式和单例(Singleton)模式,第6章探讨抽象工厂(Abstract Factory)模式和生成器(Builder)模式。剩下的4章处理最大的一类:行为型模式:第7章讨论策略(Strategy)模式,状态(State)模式和模板方法(Template Method)模式;第8章讨论职责链(Chain of Responsibility)模式和命令(Command)模式;第9章讨论迭代器(Iterator)模式、中介(Mediator)模式和观察者(Observer)模式;最后第10章讨论访问者(Visitor)模式、解释器(Interpreter)模式和备忘录(Memento)模式。
我们对每种模式的讨论都分成以下几个部分:
2002年,微软研究院(Microsoft Research)在英国的剑桥主持了一次国际会议,在这次会议上,微软展示了它的Rotor系统,这个系统将C#和.NET带给了非Windows程序员。会议结束之后,我回到家开始编写相关软件、论文和书,这一过程中我意识到:我们已经见证了一轮真正的程序设计革命的开始。自1996年Java出现以来,程序设计变得平台独立:通过Java的字节码,程序可以到处运行。然而,这种独立性只适用于Java编写的程序。与此不同的是,.NET是独立于语言的:它允许不同语言编写的程序彼此交互,只是在那一天到来之前,这仅限于Windows系统。.
在后面的五年里,出现了新的支持.NET的平台(比如Mono)以及新的支持Intel芯片的硬件(Windows跑在Intel芯片上)。结果就是,如今.NET也几乎可以到处运行了。于是,C#程序设计也成了一门可移植的编程技术。但作为一门语言,C#一直在改进,现在我们处在了向3.0飞跃的起始点上,为带来更高的生产率和更好的易用性,C# 3.0提供了大量有用的新特性。我在2003年写过一本介绍C#语言的书,4年后(2007年)发布的新特性所带来的好处,使我觉得C# 3.0将软件开发推向了一个更高的层次。我曾经想再写一本书,把C# 3.0介绍给那些已经掌握语言基础的开发者,但采用何种的形式才能更好的介绍一种编程语言,同时满足读者在精确性、示例方面的要求以及大量的现实性需求呢?
我想到了设计模式。设计模式封装了综合运用语言特性来解决问题的一般的、公认的和有效的方法。它们提升了讨论的层次,实现并发展了好的编程方法。然而,设计模式总带给人们一些不现实的感觉,人们对设计模式的印象常常是:讨论得多,用得少。我想改变这一点,借助于为他们准备的最好的编程语言:C# 3.0,让普通的开发者也真正理解设计模式。
本书为谁而写
如果你是一个钟爱自己代码的程序员,想让代码的每一行都有准确的含义,每一个特性都用在正确的场合中,这本书就是为你准备的。它将帮助你完成最基本的工作:使你的代码正确、优雅、可扩展而且高效。如果你在公司里的负责代码质量,你也需要一本像《C# 3.0设计模式》这样的书。对于那些致力于成为软件工程师或架构设计师的低层程序开发者,掌握设计模式的知识也是一大进步。
通过阅读本书,你可以掌握以下技能:
*设计模式编程;
*用来描述模式的基本UML建模表示法;
*选择适合于特定情形的模式,并比较不同的实现方式;
*使用C# 3.0的高级语言特性来高效、优雅地实现模式。
尽管本书并没有被写成一本教科书,它完全可以用于设计模式和高级程序设计方面的中级课程。
本书中所有模式及相关示例的图、代码和研究案例都可以从本书的网站下载:http://www.oreilly.com/catalog/9780596527730
阅读本书需要的知识
本书是为这种程序员准备的:至少了解C# 1.0或Java1.4程序设计并希望进一步转到最新版本的语言上,使用更加现代化的特性进行程序开发。C# 3.0的所有新特性,以及许多来自于C# 2.0的较新颖的特性,在本书中都通过示例做了介绍,为方便引用,本书还在注释文字中进行了总结。因此,本书也可以作为语言的使用指南。
本书并不要求读者熟悉设计模式。它已涵盖了全部23种经典模式。这23种模式是Erich Gamma、Richard Helm、Ralph Johnson 和John Vlissides四人于1994年在他们的《Design Patterns: Elements of Reusable Object-Oriented Software》(中文书名《设计模式:可复用面向对象软件的基础》)中提出的,而且现在已成为其它领域(如安全、并发和框架程序设计)中出现的新模式的基础。看完本书,读者将深入掌握设计模式基础,就像大多数人所理解的那样。
本书是如何组织的
第1章是综述,在之后的章节中本书详细介绍了23种核心设计模式。每一章介绍两到三种模式,选择的依据是相似的可用性,这样,在同一章的末尾可以将它们进行比较。所有这些模式被分成3组:结构型模式、创建型模式和行为型模式。
我们从结构型模式开始,第2章学习装饰器(Decorator)模式,代理(Proxy)模式和桥接(Bridge)模式;第3章学习组合(Composite)模式和享元(Flyweight)模式;第4章学习适配器(Adapter)模式和外观(Facade)模式。然后我们转向创建型模式,第5章探讨原型(Prototype)模式、工厂方法(Factory Method)模式和单例(Singleton)模式,第6章探讨抽象工厂(Abstract Factory)模式和生成器(Builder)模式。剩下的4章处理最大的一类:行为型模式:第7章讨论策略(Strategy)模式,状态(State)模式和模板方法(Template Method)模式;第8章讨论职责链(Chain of Responsibility)模式和命令(Command)模式;第9章讨论迭代器(Iterator)模式、中介(Mediator)模式和观察者(Observer)模式;最后第10章讨论访问者(Visitor)模式、解释器(Interpreter)模式和备忘录(Memento)模式。
我们对每种模式的讨论都分成以下几个部分:
序言回到顶部↑
当你面对一个需要解决的问题时(坦白地说,谁没面对过呢),我们搞计算机的人通常采用的基本策略就是“分而治之”(divide and conquer)。它的基本过程是这样的:.
*将待解决问题概念化,使之分成一系列更小的子问题;
*解决每一个子问题;
*将结果组合起来,使之成为原问题的解决方案。
将复杂的问题逐步分解,一直分解到只需操作几十亿比特的状态值,这是我们每天都在做的事情。但是,“分而治之”并非唯一可行的策略。我们还可以采取更加泛化的方法。
*将待解决的问题概念化,使之成为某个更一般的问题的特例;
*采用某种方式来解决那个更一般的问题;
*将一般问题的解决方案做适当调整,以解决这个特殊问题。
对喜欢泛化方法的人来说,设计模式是他们的主要工具。如果你能从大量的、不同领域的软件解决方案中挑出一些例子进行比较,你就会发现,尽管涉及的业务细节千差万别,它们却往往有着相似的基础结构(从某种意义上,以下两种行为的结构是类似的:1、在文件系统中查找拥有特定属性的文件,2、从分析树上查找特定类型的符号)。设计模式就是从这些一般问题的通用解法中整理出来的。
将泛化方法运用到极致的例子莫过于编程语言本身的设计与实现。就解决问题的工具而言,很难找到比C#语言更通用的了。当设计新的编程语言(或者旧编程语言的新版本)时,我们会考虑开发者们每天都要面对的一般问题,并确定如何创建出一种新的语言,能够以通用、优雅、强大的方式来解决它们,并且提供广泛的可用性。
我们想把那些最有用、是强大的抽象机制深深植入到语言的基础设施中,使你的意识里甚至忘记了这些抽象的存在。诸如“局部变量”、“过程调用”和“while循环”这样的模式已经成为我们所呼吸的空气的一部分,以致于我们现在都不觉得它们是模式了。
进一步,我们想使那些有用,但并不那么基础的模式,在我们的语言中也能以相对直接的方式来实现,并且不失清晰和优雅。C#中的类可被标记为“static”,“abstract”或“sealed”,但不可以标记为“singleton”。这是语言设计者们的有意安排。尽管如此,用C#实现一个单例模式还是相对容易的。..
在“必要基础”和“偶尔有用”之间的灰色区域就是考验设计的有趣地带了。我们观察了实际开发者在C#(及其它语言中)对设计模式的使用,而这有力的驱动了我们新版本语言的设计过程。
考虑这样一个例子:在C# 1.0中你怎样在链表上实现迭代器(Iterator)模式。你可能会定义一个枚举器类型来表示一个链表中的位置,这个链表类中包含大量令人厌烦的、影响可读性的样板代码,这样一个方案的可复用性并不怎么好。“枚举集合中的东西”,这种观念在大量的问题中都非常适用,所以有必要把它包含进语言中,成为语言概念中的一等公民。在C#2.0中,通过使用yield return语句,所有那些烦冗的代码都可以由编译器帮你产生出来,而泛型则为集合元素的迭代提供了类型安全性,不管集合中的“东西”到底是什么。
所有这些长篇大论都解释了为什么我对C# 3.0的语言级集成查询(Language Integrated Query,LINQ)感到如此激动的原因。我们相信,迭代集合中的东西是一个意义重大的开端,但我们还可以做更多。数据的排序、过滤、分组、连接、投影和转换也都是很多领域中的基本操作。不管你是在实现一个射线追踪器、编译器、XML阅读器、抑或在线银行安全系统,你都可能通过多种方式操纵元素的集合。
将这些概念从领域特定的对象模型中提取出来并融入到通用的编程语言中,我们就有希望解决更一般的问题。然而,我们更希望通过C# 1.0,2.0中已有的丰富特性,再加上C# 3.0中的查询表达式、lambda表达式、扩展方法、初始化表达式、表达式树等,我们便可以更加轻松地实现出其它各种有用的设计模式,而且不失优雅。
而这也是我为这本书而感到激动的原因。本书为那些充满奥秘的设计模式提供了实效性的C# 3.0实现。我非常希望了解开发者能在何种场合利用好这些工具和这门语言,以及哪种有用的模式可能融入到将来语言的基础设施中。...
——C#编译器开发组资深开发者Eric Lippert
2007年11月30日于华盛顿州西雅图市。
*将待解决问题概念化,使之分成一系列更小的子问题;
*解决每一个子问题;
*将结果组合起来,使之成为原问题的解决方案。
将复杂的问题逐步分解,一直分解到只需操作几十亿比特的状态值,这是我们每天都在做的事情。但是,“分而治之”并非唯一可行的策略。我们还可以采取更加泛化的方法。
*将待解决的问题概念化,使之成为某个更一般的问题的特例;
*采用某种方式来解决那个更一般的问题;
*将一般问题的解决方案做适当调整,以解决这个特殊问题。
对喜欢泛化方法的人来说,设计模式是他们的主要工具。如果你能从大量的、不同领域的软件解决方案中挑出一些例子进行比较,你就会发现,尽管涉及的业务细节千差万别,它们却往往有着相似的基础结构(从某种意义上,以下两种行为的结构是类似的:1、在文件系统中查找拥有特定属性的文件,2、从分析树上查找特定类型的符号)。设计模式就是从这些一般问题的通用解法中整理出来的。
将泛化方法运用到极致的例子莫过于编程语言本身的设计与实现。就解决问题的工具而言,很难找到比C#语言更通用的了。当设计新的编程语言(或者旧编程语言的新版本)时,我们会考虑开发者们每天都要面对的一般问题,并确定如何创建出一种新的语言,能够以通用、优雅、强大的方式来解决它们,并且提供广泛的可用性。
我们想把那些最有用、是强大的抽象机制深深植入到语言的基础设施中,使你的意识里甚至忘记了这些抽象的存在。诸如“局部变量”、“过程调用”和“while循环”这样的模式已经成为我们所呼吸的空气的一部分,以致于我们现在都不觉得它们是模式了。
进一步,我们想使那些有用,但并不那么基础的模式,在我们的语言中也能以相对直接的方式来实现,并且不失清晰和优雅。C#中的类可被标记为“static”,“abstract”或“sealed”,但不可以标记为“singleton”。这是语言设计者们的有意安排。尽管如此,用C#实现一个单例模式还是相对容易的。..
在“必要基础”和“偶尔有用”之间的灰色区域就是考验设计的有趣地带了。我们观察了实际开发者在C#(及其它语言中)对设计模式的使用,而这有力的驱动了我们新版本语言的设计过程。
考虑这样一个例子:在C# 1.0中你怎样在链表上实现迭代器(Iterator)模式。你可能会定义一个枚举器类型来表示一个链表中的位置,这个链表类中包含大量令人厌烦的、影响可读性的样板代码,这样一个方案的可复用性并不怎么好。“枚举集合中的东西”,这种观念在大量的问题中都非常适用,所以有必要把它包含进语言中,成为语言概念中的一等公民。在C#2.0中,通过使用yield return语句,所有那些烦冗的代码都可以由编译器帮你产生出来,而泛型则为集合元素的迭代提供了类型安全性,不管集合中的“东西”到底是什么。
所有这些长篇大论都解释了为什么我对C# 3.0的语言级集成查询(Language Integrated Query,LINQ)感到如此激动的原因。我们相信,迭代集合中的东西是一个意义重大的开端,但我们还可以做更多。数据的排序、过滤、分组、连接、投影和转换也都是很多领域中的基本操作。不管你是在实现一个射线追踪器、编译器、XML阅读器、抑或在线银行安全系统,你都可能通过多种方式操纵元素的集合。
将这些概念从领域特定的对象模型中提取出来并融入到通用的编程语言中,我们就有希望解决更一般的问题。然而,我们更希望通过C# 1.0,2.0中已有的丰富特性,再加上C# 3.0中的查询表达式、lambda表达式、扩展方法、初始化表达式、表达式树等,我们便可以更加轻松地实现出其它各种有用的设计模式,而且不失优雅。
而这也是我为这本书而感到激动的原因。本书为那些充满奥秘的设计模式提供了实效性的C# 3.0实现。我非常希望了解开发者能在何种场合利用好这些工具和这门语言,以及哪种有用的模式可能融入到将来语言的基础设施中。...
——C#编译器开发组资深开发者Eric Lippert
2007年11月30日于华盛顿州西雅图市。







点击看大图





加载中...

