出版時(shí)間:2009-1 出版社:機(jī)械工業(yè)出版社 作者:布什波 頁(yè)數(shù):294 譯者:王江平
Tag標(biāo)簽:無(wú)
前言
當(dāng)你面對(duì)一個(gè)需要解決的問(wèn)題時(shí)(坦白地說(shuō),誰(shuí)沒(méi)面對(duì)過(guò)呢),我們搞計(jì)算機(jī)的人通常采用的基本策略就是“分而治之”(divide and conquer)。它的基本過(guò)程是這樣的:將待解決問(wèn)題概念化,將其劃分成一系列更小的子問(wèn)題;解決每一個(gè)子問(wèn)題;將結(jié)果組合起來(lái),使其成為原問(wèn)題的解決方案。將復(fù)雜的問(wèn)題逐步分解,一直分解到只需操作幾十億比特的狀態(tài)值,這是我們每天都在做的事情。但是,“分而治之”并非惟一可行的策略。我們還可以采取更加泛化的方法:將待解決的問(wèn)題概念化,使其成為某個(gè)更一般的問(wèn)題的特例;采用某種方式來(lái)解決那個(gè)更一般的問(wèn)題;將一般問(wèn)題的解決方案做適當(dāng)調(diào)整,以解決這個(gè)特殊問(wèn)題。對(duì)喜歡泛化方法的人來(lái)說(shuō),設(shè)計(jì)模式是他們的主要工具。如果你能從大量的、不同領(lǐng)域的軟件解決方案中挑出一些例子進(jìn)行比較,你就會(huì)發(fā)現(xiàn),盡管涉及的業(yè)務(wù)細(xì)節(jié)千差萬(wàn)別,它們卻往往有著相似的基礎(chǔ)結(jié)構(gòu)(從某種意義上,以下兩種行為的結(jié)構(gòu)是類似的:1.在文件系統(tǒng)中查找擁有特定屬性的文件,2.從分析樹(shù)上查找特定類型的符號(hào))。設(shè)計(jì)模式就是從這些一般問(wèn)題的通用解法中整理出來(lái)的。將泛化方法運(yùn)用到極致的例子莫過(guò)于編程語(yǔ)言本身的設(shè)計(jì)與實(shí)現(xiàn)。就解決問(wèn)題的工具而言,很難找到比C#語(yǔ)言更通用的了。當(dāng)設(shè)計(jì)新的編程語(yǔ)言(或者舊編程語(yǔ)言的新版本)時(shí),我們會(huì)考慮開(kāi)發(fā)者們每天都要面對(duì)的一般問(wèn)題,確定如何創(chuàng)建出一種新的語(yǔ)言,能夠以通用、優(yōu)雅、強(qiáng)大的方式來(lái)解決它們,并且提供廣泛的可用性。我們想把那些最有用、最強(qiáng)大的抽象機(jī)制深深植入到語(yǔ)言的基礎(chǔ)設(shè)施中,使你的意識(shí)里甚至忘記了這些抽象的存在。諸如“局部變量”、“過(guò)程調(diào)用”和“while循環(huán)”這樣的模式已經(jīng)成為我們所呼吸的空氣的一部分,以致于我們現(xiàn)在都不覺(jué)得它們是模式了。進(jìn)一步講,我們想使那些有用,但并不那么基礎(chǔ)的模式,在我們的語(yǔ)言中也能以相對(duì)直接的方式來(lái)實(shí)現(xiàn),并且不失清晰和優(yōu)雅。C#中的類可標(biāo)記為“static”,“abstract”或“sealed”,但不可以標(biāo)記為“singleton”。這是語(yǔ)言設(shè)計(jì)者們的有意安排。盡管如此,用C#實(shí)現(xiàn)一個(gè)單例模式還是相對(duì)容易的。在“必要基礎(chǔ)”和“偶爾有用”之間的區(qū)域就是考驗(yàn)設(shè)計(jì)的有趣地帶了。我們觀察了實(shí)際開(kāi)發(fā)者在C#(及其他語(yǔ)言中)對(duì)設(shè)計(jì)模式的使用,而這有力地驅(qū)動(dòng)了我們新版本語(yǔ)言的設(shè)計(jì)過(guò)程。考慮這樣一個(gè)例子:在C#1.0中,你怎樣在鏈表上實(shí)現(xiàn)迭代器(Iterator)模式。你可能會(huì)定義一個(gè)枚舉器類型來(lái)表示一個(gè)鏈表中的位置,這個(gè)鏈表類中包含大量令人厭煩的、影響可讀性的樣板代碼,這樣一個(gè)方案的可復(fù)用性并不怎么好?!懊杜e集合中的東西”,這種觀念在大量的問(wèn)題中都非常適用,所以有必要把它包含進(jìn)語(yǔ)言中,成為語(yǔ)言概念中的一等公民。在C#2.0中,通過(guò)使用yield return語(yǔ)句,所有那些煩冗的代碼都可以由編譯器幫你產(chǎn)生出來(lái),而泛型則為集合元素的迭代提供了類型安全性,而不管集合中的“東西”到底是什么。所有這些長(zhǎng)篇大論都解釋了為什么我對(duì)c#3.0的語(yǔ)言級(jí)集成查詢(Language Integrated Query,LINQ)感到如此激動(dòng)。我們相信,迭代集合中的東西是一個(gè)意義重大的開(kāi)端,但我們還可以做更多。數(shù)據(jù)的排序、過(guò)濾、分組、連接、投影和轉(zhuǎn)換也都是很多領(lǐng)域中的基本操作。不管你是在實(shí)現(xiàn)一個(gè)射線追蹤器、編譯器、XML閱讀器或在線銀行安全系統(tǒng),你都可能通過(guò)多種方式操縱元素的集合。將這些概念從領(lǐng)域特定的對(duì)象模型中提取出來(lái)并融入到通用的編程語(yǔ)言中,我們就有希望解決更一般的問(wèn)題。然而,我們更希望通過(guò)c#1.0、2.0中已有的豐富特性,再加上C#3.0中的查詢表達(dá)式、lambda表達(dá)式、擴(kuò)展方法、初始化表達(dá)式、表達(dá)式樹(shù)等,可以更加輕松地實(shí)現(xiàn)其他各種有用的設(shè)計(jì)模式,而且不失優(yōu)雅。而這也是我為本書感到激動(dòng)的原因。本書為那些充滿奧秘的設(shè)計(jì)模式提供了實(shí)效性的C#3.0實(shí)現(xiàn)。我非常希望了解開(kāi)發(fā)者能在何種場(chǎng)合利用好這些工具和這門語(yǔ)言,以及哪種有用的模式可能融入到將來(lái)語(yǔ)言的基礎(chǔ)設(shè)施中。
內(nèi)容概要
如果想加速.NET應(yīng)用程序的開(kāi)發(fā),你就需要本書,它是解決常見(jiàn)編程問(wèn)題的優(yōu)雅的、公認(rèn)的和被證明為有效的處理方式的合集。本書條理清晰地介紹了經(jīng)典的面向?qū)ο笤O(shè)計(jì)模式,并解釋了怎樣運(yùn)用最新的C#3.0語(yǔ)言特性來(lái)編寫它們?! #設(shè)計(jì)模式利用新的C#3.0語(yǔ)言和.NET 3.5框架中的特性來(lái)實(shí)現(xiàn)開(kāi)發(fā)社區(qū)中廣為人知的23種設(shè)計(jì)模式。本書包含了揭示每種模式在實(shí)際中如何運(yùn)用的豐富案例,以及對(duì)于模式及其最佳使用場(chǎng)合和最佳組合方式的富有洞察力的比較。本書結(jié)構(gòu)清晰、示例豐富,涵蓋以下內(nèi)容: · 介紹設(shè)計(jì)模式以及為什么使用它們,其中的表格和使用指導(dǎo)可以幫助你從多種模式中選出想要 的模式?! ?各種經(jīng)典設(shè)計(jì)模式的演示,包括創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式,還有每種模式的UML表示以及其中各參與者所扮演的角色?! ?從示例中引入C#3.0語(yǔ)言特性,并在文本框中對(duì)它們進(jìn)行總結(jié),以方便引用?! ?每個(gè)模式的示例都是實(shí)際可運(yùn)行的.NET 3.5程序,可以從O’Reilly網(wǎng)站和作者的配套網(wǎng)站上下 載?! ?檢驗(yàn)?zāi)闶欠窭斫鈺袃?nèi)容的小測(cè)試和練習(xí)。 在本書中,你將學(xué)習(xí)如何編寫正確、可擴(kuò)展和高效的代碼,以節(jié)省前期的開(kāi)發(fā)時(shí)間,消除后期的軟件問(wèn)題。
作者簡(jiǎn)介
Judith Bishop是南非比勒陀利亞大學(xué)計(jì)算機(jī)科學(xué)系教授。她專注于編程語(yǔ)言在分布式系統(tǒng)中的應(yīng)用以及基于Web的技術(shù)。她是新技術(shù)的倡導(dǎo)者,所著Java和C#方面的書籍以6種語(yǔ)言在全世界發(fā)行。Judith是IFIP(International Federation for Information Processing,國(guó)際信息處理聯(lián)合會(huì))TC2(軟件)的南非代表,她還是多個(gè)國(guó)際會(huì)議委員會(huì)及編委會(huì)的主席或成員。
書籍目錄
序言前言第1章 C#與設(shè)計(jì)模式關(guān)于模式關(guān)于UML關(guān)于C#3.O關(guān)于示例第2章 結(jié)構(gòu)型模式之裝飾器、代理與橋接裝飾器模式代理模式橋接模式示例:OpenBook模式比較第3章 結(jié)構(gòu)型模式之組合與享元組合模式享元模式模式比較第4章 結(jié)構(gòu)型模式之適配器與外觀適配器模式外觀模式模式比較第5章 創(chuàng)建型模式之原型、工廠方法與單例原型模式工廠方法模式單例模式模式比較第6章 創(chuàng)建型模式之抽象工廠與生成器抽象工廠模式生成器模式模式比較第7章 行為型模式之策略、狀態(tài)與模板方法策略模式狀態(tài)模式模板方法模式模式比較第8章 行為型模式之職責(zé)鏈與命令職責(zé)鏈模式命令模式模式比較第9章 行為型模式之迭代器、中介與觀察者迭代器模式中介模式觀察者模式模式討論和比較第10章 行為型模式之訪問(wèn)者、解釋器與備忘錄訪問(wèn)者模式解釋器模式備忘錄模式模式比較第11章 設(shè)計(jì)模式展望模式總結(jié)設(shè)計(jì)模式展望結(jié)束語(yǔ)附錄參考書目
編輯推薦
本書結(jié)構(gòu)清晰、示例豐富,涵蓋以下內(nèi)容: 介紹設(shè)計(jì)模式以及為什么使用它們,其中的表格和使用指導(dǎo)可以幫助你從多種模式中選出想要 的模式。 各種經(jīng)典設(shè)計(jì)模式的演示,包括創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式,還有每種模式的UML表示以及其中各參與者所扮演的角色。 從示例中引入C#3.0語(yǔ)言特性,并在文本框中對(duì)它們進(jìn)行總結(jié),以方便引用。 每個(gè)模式的示例都是實(shí)際可運(yùn)行的.NET 3.5程序,可以從Oreilly網(wǎng)站和作者的配套網(wǎng)站上下 載。 檢驗(yàn)?zāi)闶欠窭斫鈺袃?nèi)容的小測(cè)試和練習(xí)。在《C#3.0設(shè)計(jì)模式》中,你將學(xué)習(xí)如何編寫正確、可擴(kuò)展和高效的代碼,以節(jié)省前期的開(kāi)發(fā)時(shí)間,消除后期的軟件問(wèn)題。
圖書封面
圖書標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載