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