Java設(shè)計(jì)模式

出版時(shí)間:2012-9  出版社:電子工業(yè)出版社  作者:[美]梅特斯克(Metsker,S.J.),[美]維克(Wake,W.J.)  譯者:張逸,史磊  
Tag標(biāo)簽:無  

內(nèi)容概要

本書通過一個(gè)完整的Java項(xiàng)目對(duì)經(jīng)典著作Design
Patterns一書介紹的23種設(shè)計(jì)模式進(jìn)行了深入分析與講解,實(shí)踐性強(qiáng),卻又不失對(duì)模式本質(zhì)的探討。本書創(chuàng)造性地將這些模式分為5大類別,以充分展現(xiàn)各個(gè)模式的重要特征,并結(jié)合UML類圖與對(duì)應(yīng)的Java程序,便于讀者更好地理解。全書給出了大量的練習(xí),作為對(duì)讀者的挑戰(zhàn),以啟發(fā)思考,督促讀者通過實(shí)踐練習(xí)的方式來掌握設(shè)計(jì)模式。同時(shí),作者又給出了這些練習(xí)的參考答案,使讀者可以印證比較,找出自己的不足,提高設(shè)計(jì)技能。

作者簡(jiǎn)介

作者:(美國(guó))史蒂芬?約翰?梅特斯克(Steven John Metsker) (美國(guó))威廉?維克(William C.Wake) 譯者:張逸 史磊  梅特斯克(Steven John Metsker)是Dominion Digital公司的管理顧問,該公司負(fù)責(zé)信息技術(shù)與商業(yè)過程的重新設(shè)計(jì)。Steven擅長(zhǎng)運(yùn)用面向?qū)ο蠹夹g(shù)構(gòu)建結(jié)構(gòu)清晰、功能強(qiáng)大的軟件系統(tǒng)。他還是Building Parsers with JavaTM、Design Pattern JavaTM Workbook與Design Patterns in C#(皆由Addison—Wesley出版)等著作的作者。 維克(William C.Wake)是一名獨(dú)立軟件咨詢師、教練和培訓(xùn)講師,他擁有超過二十年的軟件開發(fā)經(jīng)驗(yàn)。William C.Wake先后任職于Capital One Financial、DMR Trecom與VTLS。他Refactoring Workbook與ExtremeProgramming Explored(皆由Addison—Wesley出版)等著作的作者。

書籍目錄

序xv
第1章 緒論1
為何需要模式1
為何需要設(shè)計(jì)模式2
為何選擇Java3
UML3
挑戰(zhàn)4
本書的組織4
歡迎來到Oozinoz公司6
小結(jié)6
第1部分 接口型模式
第2章 接口型模式介紹8
接口與抽象類8
接口與職責(zé)10
小結(jié)11
超越普通接口12
第3章 適配器(Adapter)模式13
接口適配13
類與對(duì)象適配器17
JTable對(duì)數(shù)據(jù)的適配20
識(shí)別適配器24
小結(jié)25
第4章 外觀(Facade)模式27
外觀類、工具類和示例類27
重構(gòu)到外觀模式29
小結(jié)38
第5章 合成(Composite)模式39
常規(guī)組合39
合成模式中的遞歸行為40
組合、樹與環(huán)42
含有環(huán)的合成模式47
環(huán)的影響50
小結(jié)51
第6章 橋接(Bridge)模式52
常規(guī)抽象:橋接模式的一種方法52
從抽象到橋接模式54
使用橋接模式的驅(qū)動(dòng)器57
數(shù)據(jù)庫(kù)驅(qū)動(dòng)57
小結(jié)59
第2部分 職責(zé)型模式
第7章 職責(zé)型模式介紹62
常規(guī)的職責(zé)型模式62
根據(jù)可見性控制職責(zé)64
小結(jié)65
超越普通職責(zé)65
第8章 單例(Singleton)模式67
單例模式機(jī)制67
單例和線程68
識(shí)別單例70
小結(jié)71
第9章 觀察者(Observer)模式72
經(jīng)典范例:GUI中的觀察者模式72
模型/視圖/控制器76
維護(hù)Observable對(duì)象82
小結(jié)84
第10章 調(diào)停者(Mediator)模式85
經(jīng)典范例:GUI調(diào)停者(Mediator)85
關(guān)系一致性中的調(diào)停者模式89
小結(jié)96
第11章 代理(Proxy)模式97
經(jīng)典范例:圖像代理97
重新思考圖片代理102
遠(yuǎn)程代理104
動(dòng)態(tài)代理109
小結(jié)114
第12章 職責(zé)鏈(Chain of Responsibility)模式115
現(xiàn)實(shí)中的職責(zé)鏈模式115
重構(gòu)為職責(zé)鏈模式117
固定職責(zé)鏈119
沒有組合結(jié)構(gòu)的職責(zé)鏈模式121
小結(jié)121
第13章 享元(Flyweight)模式122
不變性122
抽取享元中不可變的部分123
共享享元125
小結(jié)128
第3部分 構(gòu)造型模式
第14章 構(gòu)造型模式介紹130
構(gòu)造函數(shù)的挑戰(zhàn)130
小結(jié)132
超出常規(guī)的構(gòu)造函數(shù)132
第15章 構(gòu)建者(Builder)模式134
常規(guī)的構(gòu)建者134
在約束條件下構(gòu)建對(duì)象137
可容錯(cuò)的構(gòu)建者139
小結(jié)140
第16章 工廠方法(Factory Method)模式141
經(jīng)典范例:迭代器141
識(shí)別工廠方法142
控制要實(shí)例化的類143
并行層次結(jié)構(gòu)中的工廠方法模式145
小結(jié)147
第17章 抽象工廠(Abstract Factory)模式148
經(jīng)典范例:圖形用戶界面工具箱148
抽象工廠和工廠方法153
包和抽象工廠157
小結(jié)157
第18章 原型(Prototype)模式158
作為工廠的原型158
利用克隆進(jìn)行原型化159
小結(jié)162
第19章 備忘錄(Memento)模式163
經(jīng)典范例:使用備忘錄模式執(zhí)行撤銷操作163
備忘錄的持久性170
跨會(huì)話的持久性備忘錄170
小結(jié)174
第4部分 操作型模式
第20章 操作型模式介紹176
操作和方法176
簽名177
異常178
算法和多態(tài)179
小結(jié)180
超越常規(guī)的操作181
第21章 模板方法(Template Method)模式182
經(jīng)典范例:排序182
完成一個(gè)算法186
模板方法鉤子188
重構(gòu)為模板方法模式189
小結(jié)191
第22章 狀態(tài)(State)模式193
對(duì)狀態(tài)進(jìn)行建模193
重構(gòu)為狀態(tài)模式197
使?fàn)顟B(tài)成為常量201
小結(jié)203
第23章 策略(Strategy)模式204
策略建模204
重構(gòu)到策略模式207
比較策略模式與狀態(tài)模式211
比較策略模式和模板方法模式211
小結(jié)212
第24章 命令(Command)模式213
經(jīng)典范例:菜單命令213
使用命令模式來提供服務(wù)216
命令鉤子217
命令模式與其他模式的關(guān)系219
小結(jié)220
第25章 解釋器(Interpreter)模式221
一個(gè)解釋器示例221
解釋器、語言和解析器233
小結(jié)234
第5部分 擴(kuò)展型模式
第26章 擴(kuò)展型模式介紹236
面向?qū)ο笤O(shè)計(jì)的原則236
Liskov替換原則237
迪米特法則238
消除代碼的壞味道239
超越常規(guī)的擴(kuò)展240
小結(jié)241
第27章 裝飾器(Decorator)模式242
經(jīng)典范例:流和輸出器242
函數(shù)包裝器250
裝飾器模式和其他設(shè)計(jì)模式的關(guān)系257
小結(jié)258
第28章 迭代器(Iterator)模式259
普通的迭代259
線程安全的迭代261
基于合成結(jié)構(gòu)的迭代267
小結(jié)277
第29章 訪問者(Visitor)模式278
訪問者模式機(jī)制278
常規(guī)的訪問者模式280
Visitor環(huán)286
訪問者模式的危機(jī)290
小結(jié)292
附錄A 指南293
附錄B 答案297
附錄C Oozinoz源代碼366
附錄D UML概覽369
參考文獻(xiàn)375

章節(jié)摘錄

版權(quán)頁:   插圖:   假設(shè)其他的開發(fā)者編寫了一個(gè)方法,用來查詢車間里所有機(jī)器擁有的原料桶的集合。一旦訪問到卸載緩沖池,如果unloadBuffer類的9etTubs0方法拋出異常,這段代碼就會(huì)出現(xiàn)問題。這嚴(yán)重違反了LSP:當(dāng)你將unloadBuffer對(duì)象當(dāng)做Machine對(duì)象來使用時(shí),程序可能會(huì)崩潰!假設(shè)不拋出異常,我們需要簡(jiǎn)單地忽略對(duì)unloadBuffer類中9etTubs0和addTubO的調(diào)用。這一做法依然違反了LSP,因?yàn)樵谀憬o機(jī)器添加一個(gè)原料桶時(shí),這個(gè)原料桶可能會(huì)消失! 違反LSP并不一定是設(shè)計(jì)缺陷。針對(duì)Oozinoz公司的這種情況,需要權(quán)衡一下,讓Machi ne類擁有大多數(shù)機(jī)器的行為和違反LSP原則,究竟哪個(gè)價(jià)值更大。重要的一點(diǎn)是意識(shí)到LSP,并且清楚為什么其他設(shè)計(jì)可能違反了LSP。 迪米特法則 在20世紀(jì)80年代后期,美國(guó)東北大學(xué)Demeter Project的成員嘗試編輯了一些規(guī)則,用于確保健康的面向?qū)ο缶幊?。?xiàng)目團(tuán)隊(duì)將這些規(guī)則稱為迪米特法則(Law ofDemeter,LoD)。KarlLieberherr和Ian Holland在Assuring Good Style for Object—Oriented Programs一文中全面地總結(jié)了這一規(guī)則。聲明認(rèn)為:非正式地說,迪米特法則要求每個(gè)方法只能給有限的對(duì)象發(fā)送消息,包括參數(shù)對(duì)象、[this]偽變量,以及[this]的直接子部分。文章隨后給出了該法則的正式定義。相對(duì)于完全理解迪米特法則的意圖,識(shí)別設(shè)計(jì)是否違反該法則更加容易。 假設(shè)你有一個(gè)Material Manager對(duì)象,該對(duì)象有一個(gè)方法接收一個(gè)Tub對(duì)象作為參數(shù)。Tub對(duì)象有一個(gè)Location屬性,該屬性返回一個(gè)Machi ne對(duì)象,用以表示桶被放在哪個(gè)位置。假設(shè)在Material Manager的方法中,想要知道機(jī)器是否可用,你可能會(huì)寫如下代碼: 如果這個(gè)挑戰(zhàn)僅僅讓你覺得形如a.b.c的表達(dá)式是錯(cuò)誤的,那就降低了迪米特法則的價(jià)值。事實(shí)上,Lieberherr和Holland希望迪米特法則能夠進(jìn)一步確定無誤地回答這樣的問題:是否可以遵循某種公式或法則來寫出更好的面向?qū)ο蟪绦??這篇闡釋迪米特法則的早期論文非常值得我們拜讀。就像Liskov替換原則一樣,如果知道并遵循這些規(guī)則,它就會(huì)幫助你寫出更好的代碼,一旦你的設(shè)計(jì)違背了這些原則,就能夠及時(shí)獲知。 你會(huì)發(fā)現(xiàn),遵循這些指導(dǎo)原則,擴(kuò)展性就能夠自然而然產(chǎn)生好的代碼。但是,對(duì)于很多開發(fā)者而言,面向?qū)ο蟮拈_發(fā)依然是一門藝術(shù)。對(duì)代碼庫(kù)的藝術(shù)擴(kuò)展源于藝術(shù)家們的實(shí)踐,而這些大師們依然在不斷地改進(jìn)他們的藝術(shù)。重構(gòu)就是諸多技藝中的一種工具,它可以在不改變既有功能的前提下,改善代碼的質(zhì)量。 消除代碼的壞味道 你可能寄希望于Liskov替換原則與迪米特法則,能夠永遠(yuǎn)地防止你寫出拙劣的代碼。不過,更實(shí)際的做法是運(yùn)用這些準(zhǔn)則來幫助發(fā)現(xiàn)代碼的壞味道,然后修復(fù)它。這是一種通用的實(shí)踐:先寫出可工作的代碼,然后找出代碼的問題,并且修復(fù)它,以提升代碼質(zhì)量。但是該如何準(zhǔn)確地識(shí)別問題呢?答案就是找到代碼的壞味道。在Refactoring:Improving the Design of ExitingCode(由Fowler等人在1999年編寫)一書中描述了22種壞味道,并給出了相應(yīng)的重構(gòu)手法。

編輯推薦

《Java設(shè)計(jì)模式(第2版)》適合各個(gè)層次的Java開發(fā)人員與設(shè)計(jì)人員閱讀,也可以作為學(xué)習(xí)Java與設(shè)計(jì)模式的參考讀物或教材。

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    Java設(shè)計(jì)模式 PDF格式下載


用戶評(píng)論 (總計(jì)67條)

 
 

  •   詳細(xì)介紹了,java中的設(shè)計(jì)模式,很適合開發(fā)時(shí)做參考
  •   正在讀,設(shè)計(jì)模式分的比較細(xì) 以例子的方式講解
  •   還未開始看,不過對(duì)于經(jīng)典設(shè)計(jì)模式類的書籍,無論初學(xué)或者資深,都需要經(jīng)常翻閱,提升自己
  •   很好 適合不懂設(shè)計(jì)模式的看
  •   從不同角度學(xué)設(shè)計(jì)模式
  •   大致瀏覽了下 蠻不錯(cuò)的 書里還寫了一些“挑戰(zhàn)” 就是出題 然后最后給了題的答案 挺有意思的
  •   書本分類很明確,講述的很好,不呆板,學(xué)習(xí)起來很輕松。我很喜歡,特別是挑戰(zhàn)欄目。
  •   剛拿到書,質(zhì)量不錯(cuò),有實(shí)例的講解,得好好學(xué)習(xí),
  •   看了一小部分,很受啟發(fā)
  •   適合有一定基礎(chǔ)的人閱讀
  •   幫朋友買的,反饋結(jié)果,書很好!朋友很喜歡!
  •   幫朋友買的,據(jù)說不錯(cuò),是他想要的。書的裝訂和印刷都還好。
  •   很實(shí)用很詳細(xì) 很適合初學(xué)者使用
  •   不錯(cuò)不錯(cuò),經(jīng)典之作
  •   看了一些,正是我所想要看的書,給我的幫助很大
  •   挺不錯(cuò),贊一個(gè)
  •   從書的價(jià)值來看,值。
  •   hcj
  •   剛買到手 還沒開始看
  •   很滿意,很不錯(cuò)
  •   活到老學(xué)到老。值得一讀
  •   有時(shí)間讓老公寫追評(píng),給他買的
  •   內(nèi)容不錯(cuò) 正是我需要的
  •   例子舉得都不是很貼切
  •   書寫得不錯(cuò),但是設(shè)計(jì)模式需要長(zhǎng)期的實(shí)踐運(yùn)用才能理解透的。慢慢看吧
  •   深入學(xué)習(xí)這本書,有利于提高java實(shí)戰(zhàn)能力
  •   這個(gè)是java 開發(fā)人員必備的吧~
  •   在學(xué)習(xí)了java一段時(shí)間后,可以用它來讓自己加深理解和記憶。
  •   比較有條理性
  •   內(nèi)容挺適合初學(xué)者讀的
  •   幫朋友帶了,說不錯(cuò),學(xué)習(xí)中。。。
  •   兩本書質(zhì)量不錯(cuò)
  •   這本書值得一看,對(duì)于我們的提升還是很有用的!
  •   看了幾頁,內(nèi)容還不知道怎么樣,紙質(zhì)還不錯(cuò),但書有點(diǎn)薄
  •   買了,還沒有細(xì)看。感覺內(nèi)容有點(diǎn)雜亂,翻翻還是可以的。
  •   一種知識(shí),可能當(dāng)時(shí)你閱讀,沒有什么感覺,但是等你積累了一定經(jīng)驗(yàn)再來看,你會(huì)發(fā)現(xiàn)很多新的感悟,Java設(shè)計(jì)模式就是這樣的一本書
  •   里面有些思考題,而且還有答案,這點(diǎn)挺好,適合初級(jí)程序員讀。感覺翻譯的不怎么樣,有些地方翻譯的不好理解。
  •   剛買回來看了兩章,感覺內(nèi)容偏概念些,寫的也比較抽象,適合有些基礎(chǔ)的人看,現(xiàn)在暫時(shí)還理解不了!
  •   書不錯(cuò)就是外殼弄得很臟。
  •   收到書后看了一點(diǎn),內(nèi)容基本上不錯(cuò),但書本有折痕,似乎是二手的,而且書的紙質(zhì)不好。
  •   個(gè)人感覺書的內(nèi)容不夠詳細(xì),推薦買馬丁福勒爾的書
  •   和相像中不一要
  •   可能是個(gè)人品味的問題,我感覺這書是寫的比較爛的,和老的JAVA設(shè)計(jì)模式相比 相差太多。
  •   很多長(zhǎng)句子明顯是無腦從原著翻譯過來的,整本書的組織還算可以,但是具體的講解著實(shí)不敢恭維,其中的各種 挑戰(zhàn)! 也是仁者見仁吧,個(gè)人覺得看起來很麻煩,初學(xué)者看看大話設(shè)計(jì)模式都比這強(qiáng),起碼遠(yuǎn)不值得這個(gè)價(jià)格,不值得購(gòu)買
  •   講的不是很詳細(xì),很多設(shè)計(jì)模式的精髓沒有體現(xiàn)出來
  •   內(nèi)容很少,對(duì)各種模式的講解非常模糊
  •   同樣一本書,為什么在亞馬遜是38塊,而在當(dāng)當(dāng)是60,請(qǐng)解釋一下!要不是我今天才發(fā)現(xiàn),書又寫字了,我指定要退貨。這是為什么?????????下次再也不買當(dāng)當(dāng)?shù)臅?,第一次在?dāng)當(dāng)買書,碰到這樣的事,這也是最后一次
  •   這本書我是買來作為參考備用的,一直沒完全有時(shí)間去讀,但絕對(duì)是好處!不懂模式是很難做出靈活的系統(tǒng)的
  •   為什么我在網(wǎng)上下的資源 只有一個(gè)視頻 還沒有聲音 !?。。。。?!
  •   價(jià)格很是便宜,比某迅,貓狗商城,襠襠便宜好多。
  •   本書頁數(shù)376頁,內(nèi)容也是網(wǎng)上大量能搜到的23種模式的探討,且書里內(nèi)容的行間距大,而此書定價(jià)75元,我認(rèn)為不值。買時(shí)打折4.9折,倒是可以買來一閱。
  •   不錯(cuò),就例子要慢慢品味才懂
  •   雖然沒看過gof4的作品,但就本書的內(nèi)容來說,寫的有點(diǎn)不知所云,當(dāng)然這是個(gè)人感受
  •   本人英文還不錯(cuò),因?yàn)橼s時(shí)間,所以買本中文的來看。但是拿到書一看,越看越不明白,后來跟英文原版一對(duì)比, 翻譯的什么狗屁玩意,不重要的地方就不說了,很多關(guān)鍵的總結(jié)性的地方都翻譯的驢唇不對(duì)馬嘴,真是坑爹。不想多說了,這本書翻譯的就是垃圾中的戰(zhàn)斗機(jī),強(qiáng)烈建議不好買。本人已將此書拿去墊桌子。
  •   書的封面紙張和內(nèi)容的紙張不齊,并且紙張很薄、很不好的感覺。
  •   書還可以,有點(diǎn)深懊,有點(diǎn)東西看了幾遍也沒明白
  •   這本書很不錯(cuò)呢。對(duì)于我來說很實(shí)用
  •   和其他的設(shè)計(jì)模式書不一樣
  •   不是那么通俗易懂.還是大話設(shè)計(jì)模式閱讀感比較強(qiáng)
  •   經(jīng)典書籍,好像還不錯(cuò)
  •   要寫什么oo
  •   感覺不是很好,很空洞
  •   便宜,便宜,真心便宜
  •   個(gè)人憑借
  •   java設(shè)計(jì)模式
  •   非常好,正在看。。。。。
  •   對(duì)工作有幫助的一本書
 

250萬本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7