大話設計模式:JAVA風雲再起彩色加強版
 
作者: 程杰 
書城編號: 25739490

原價: HK$293.00
現售: HK$278.35 節省: HK$14.65

購買此書 10本或以上 9折, 60本或以上 8折

購買後立即進貨, 約需 7-12 天

 
 
出版社: 深智數位
出版日期: 2022/12
頁數: 608
ISBN: 9786267146804

商品簡介


☆★☆★【百萬讀者認可!趣味解讀“設計模式+OOP”】★☆★☆
全彩印刷+立體圖表+學習資源=詳盡解析
全新升級,全新體驗


為什麼Python這麼強大,Javascript這麼好用,php這麼容易上手,你一定要學一個C++或Java這麼「大」而「重」的語言?簡簡單單def就一個函數,輕輕鬆鬆一個class就一個類別,非得用複雜又看不懂的宣告及設定在Java中寫一個Hello World!?如果你只是寫寫九九乘法表,和別人說嘴你也會「程式設計」,當然Python或Js就足夠了。但如果你的目標是成為一個專業的「程式設計」高手,甚至是在程式設計後期成為「系統架構師」,就算你以後用的是Python,JS或是其它更進步的程式語言,設計模式才會是陪你走一輩子的終身伴侶。C++/Java這種大型語言,在設計之初的哲學就不是方便上手,這些程式語言的目標,就是可以利用它們做出一個最「完美」的系統,建造出系統中的摩天大樓或是登月火箭。然而這麼大的工程,怎麼可能沒有完美的基礎,怎麼可能不考慮到每一個細節,怎麼可能不兼顧到每一個思路?學習C++/Java語言,就是打磨這個最重要的根基。也許你已經是Python高手,也許你已經用Node建立過大型的系統,但仔細看看你自認完美的程式碼,你有沒有仔細想過,為什麼不用list而用iterator?為什麼是yield而不是return?看完這本淺顯易懂,用最貼近生活的小故事,把23個設計模式完整而詳細的展示在你眼前,大道至簡,大中至正,這不但會是你最重要的一本「程式設計哲學書」,更會是程式設計生涯中,會不時回味,更屢屢回味無窮的寶典。

本書看點
✪趣味式真Java代碼
✪生動解析OOP觀念
✪卡片式重構23個GoF設計模式
✪對話式解讀知識點

 

作者

程杰

被讀者譽為很會寫IT技術書的專家,開創一種趣味講解IT知識的風格與模式。

參與過政府、證券、遊戲、交通等多種行業的軟體發展及專案管理工作,也擔任過軟體工程師培訓的教師,目前從事教育類APP/微信小程式的開發與運營。

高中數學教學的獨特經歷,所以著作中處處以初學者視角思考和分析問題,成為當前極受歡迎的IT技術書作者。

 

目錄

Chapter 0 楔子:教育訓練實習生-- 物件導向基礎
0.1 教育訓練實習生
0.2 類別與實例
0.3 建構方法
0.4 方法多載
0.5 屬性與修飾符號
0.6 封裝
0.7 繼承
0.8 多形
0.9 重構
0.10 抽象類別
0.11 介面
0.12 集合
0.13 泛型
0.14 客套

Chapter 01 程式無錯就是優? -- 簡單工廠模式
1.1 面試受挫
1.2 初學者程式毛病
1.3 程式規範
1.4 物件導向程式設計
1.5 活字印刷,物件導向
1.6 物件導向的好處
1.7 複製vs. 重複使用
1.8 業務的封裝
1.9 緊耦合vs. 鬆散耦合
1.10 簡單工廠模式
1.11 UML 類別

Chapter 02 商場促銷-- 策略模式
2.1 商場收銀軟體
2.2 增加打折
2.3 簡單工廠實現
2.4 策略模式
2.5 策略模式實現
2.6 策略與簡單工廠結合
2.7 策略模式解析

Chapter 03 電子閱讀器vs. 手機-- 單一職責原則
3.1 閱讀幹嘛不直接用手機?
3.2 手機不純粹
3.3 電子閱讀器vs. 手機
3.4 單一職責原則
3.5 方塊遊戲的設計
3.6 電子閱讀器與手機的利弊

Chapter 04 考研求職兩不誤-- 開放- 封閉原則
4.1 考研失敗
4.2 開放- 封閉原則
4.3 何時應對變化
4.4 兩手準備,並全力以赴
Chapter 05 會修電腦不會修收音機? -- 依賴倒轉原則
5.1 女孩請求修電腦
5.2 電話遙控修電腦
5.3 依賴倒轉原則
5.4 里氏代換原則
5.5 修收音機

Chapter 06 穿什麼有這麼重要? -- 裝飾模式
6.1 穿什麼有這麼重要?
6.2 小菜扮靚第一版
6.3 小菜扮靚第二版
6.4 裝飾模式
6.5 小菜扮靚第三版
6.6 商場收銀程式再升級
6.7 簡單工廠+ 策略+ 裝飾模式實現
6.8 裝飾模式複習

Chapter 07 為別人做嫁衣-- 代理模式
7.1 為別人做嫁衣!
7.2 沒有代理的程式
7.3 只有代理的程式
7.4 符合實際的程式
7.5 代理模式
7.6 代理模式應用
7.7 秀才讓小六代其求婚

Chapter 08 工廠製造細節無須知-- 工廠方法模式
8.1 需要了解工廠製造細節嗎?
8.2 簡單工廠模式實現
8.3 工廠方法模式實現
8.4 簡單工廠vs. 工廠方法
8.5 商場收銀程式再再升級
8.6 簡單工廠+ 策略+ 裝飾+ 工廠方法

Chapter 09 簡歷複印-- 原型模式
9.1 誇張的簡歷
9.2 簡歷程式初步實現
9.3 原型模式
9.4 簡歷的原型實現
9.5 淺複製與深複製
9.6 簡歷的深複製實現
9.7 複製簡歷vs. 手寫求職信

Chapter 10 考題抄錯會做也白搭-- 範本方法模式
10.1 選擇題不會做,猜吧!
10.2 重複=易錯+難改
10.3 提煉程式
10.4 範本方法模式
10.5 範本方法模式特點
10.6 主觀題,看你怎麼猜

Chapter 11 無熟人難辦事? -- 迪米特法則
11.1 第一天上班
11.2 無熟人難辦事
11.3 迪米特法則

Chapter 12 牛市股票還會虧錢? -- 面板模式
12.1 牛市股票還會虧錢?
12.2 股民炒股程式
12.3 投資基金程式
12.4 面板模式
12.5 何時使用面板模式

Chapter 13 好菜每回味不同-- 建造者模式
13.1 炒麵沒放鹽
13.2 建造小人一
13.3 建造小人二
13.4 建造者模式
13.5 建造者模式解析
13.6 建造者模式基本程式

Chapter 14 老闆回來?我不知道-- 觀察者模式
14.1 老闆回來?我不知道!
14.2 雙向耦合的程式
14.3 解耦實踐一
14.4 解耦實踐二
14.5 觀察者模式
14.6 觀察者模式特點
14.7 Java 內建介面實現
14.8 觀察者模式的應用
14.9 石守吉失手機後

Chapter 15 就不能不換DB 嗎? -- 抽象工廠模式
15.1 就不能不換DB 嗎?
15.2 最基本的資料存取程式
15.3 用了工廠方法模式的資料存取程式
15.4 用了抽象工廠模式的資料存取程式
15.5 抽象工廠模式
15.6 抽象工廠模式的優點與缺點
15.7 用簡單工廠來改進抽象工廠
15.8 用反射+ 抽象工廠的資料存取程式
15.9 用反射+ 設定檔實現資料存取程式
15.10 商場收銀程式再再再升級
15.10 無癡迷,不成功

Chapter 16 無盡加班何時休-- 狀態模式
16.1 加班,又是加班!
16.2 工作狀態- 函數版
16.3 工作狀態- 分類版
16.4 方法過長是壞味道
16.5 狀態模式
16.6 狀態模式好處與用處
16.7 工作狀態- 狀態模式版

Chapter 17 在NBA 我需要翻譯-- 轉接器模式
17.1 在NBA 我需要翻譯!
17.2 轉接器模式
17.3 何時使用轉接器模式
17.4 籃球翻譯轉接器
17.5 轉接器模式的.Net 應用
17.6 扁鵲的醫術

Chapter 18 如果可以回到過去-- 備忘錄模式
18.1 如果再給我一次機會……
18.2 遊戲存進度
18.3 備忘錄模式
18.4 備忘錄模式基本程式
18.5 遊戲進度備忘

Chapter 19 分公司=一部門-- 組合模式
19.1 分公司不就是一部門嗎?
19.2 組合模式
19.3 透明方式與安全方式
19.4 何時使用組合模式
19.5 公司管理系統
19.6 組合模式好處

Chapter 20 想走?可以!先買票-- 迭代器模式
20.1 乘車買票,不管你是誰!
20.2 迭代器模式
20.3 迭代器實現
20.4 Java 的迭代器實現
20.5 迭代高手

Chapter 21 有些類別也需計劃生育-- 單例模式

序/導讀

前言

■本書是一本程式集?並不是。

■本書是一本程式設計故事匯?並不是。

本書是一本透過故事說明程式如何設計的程式設計方法集。

■本書是給連 Hello World 都沒寫過的非程式設計師看的書嗎?並不是。

■本書是給玩過穿孔紙帶(0/1)、寫過組合語言、BASIC、C、C++、Java、C#、Python 等語言,開發過大型系統的骨灰級程式設計師看的書嗎?並不是。

本書希望能給這樣的讀者一些好的建議和提示:

■渴望了解 OO(Object Oriented,物件導向)世界的初學者
■困惑於僵硬、脆弱、無法重複使用的程式設計師
■打著 OO 程式設計的旗號,做著 PO(Procedure Oriented,過程)開發導向的基於物件的程式設計師
■習慣了用 Python 框架、函數庫、自動化開發而忽視了軟體開發本質的程式設計師
■決心脫離「藍領程式設計師」圈的程式設計師

✤ 本書起因

寫這本書源於我的一次做教育訓練的經歷,學生大多是電腦專業學生或有過一定經驗的在職開發者。他們都知道類別、方法、建構方法、甚至抽象類別、介面等概念,並用Visual Studio 寫過桌面或Web 程式,可是當我提問為什麼要物件導向,它的好處在哪裡時,卻沒有人能完整地講出來,多數人的反應是,概念是知道的,就是表達不清楚。

針對於此,我舉了中國古代的四大發明中活字印刷的例子(見第1 章),透過一個虛構的曹操做詩的情景,把物件導向的幾大好處講解了一下,學生普遍感覺這樣的教學比直接告訴物件導向有什麼好處要更加容易理解和記憶。

這就使得我不斷地思考這樣一個問題,學一門技術是否需要趣味性以及通俗性的引導。

我在思考中發現,看小說時,一般情況下我都可以完整地讀完它,而閱讀技術方面的圖書,卻很少按部就班、每章每頁的仔細閱讀。儘管這兩者有很大區別,技術書中可能有不少知識是已經學會或暫時用不上的內容,但也不得不承認,小說之所以可以堅持讀完是因為我對它感興趣,作者的精妙文筆版面配置在吸引我。而有些技術書的枯燥乏味使得讀者閱讀很難堅持,很多時候讀個幾章就進入書架了。

技術的教學同樣如此,除非學生是抱著極大的學習動機來參與其中,否則照本宣科的教學、枯燥乏味的講解,學生一定會被龐雜的概念和複雜的邏輯攪暈了頭腦,致使效果大打折扣。也正因如此,造成部分學生學了四年的電腦程式設計,卻可能連物件導向有什麼好處都還說不清。

為什麼不可以讓技術書帶點趣味性呢,哪怕這些趣味性與所講的技術並不十分貼切,只要不是影響技術核心的本質,不產生重大的錯誤,讓讀者能輕鬆閱讀它,並且有了一定的了解和感悟,這要比一本寫得高深無比卻被長期束之高閣的書要好得多。

也正是這個原因,本人開始了關於設計模式的趣味性寫作的嘗試。

✤ 本書讀者

顯然本書不是給零程式設計經驗的人看的,對想入這一行的朋友來說,找一門程式語言,從頭開始或許才是正道。而本書也不太適合有多年物件導向開發經驗、對常用設計模式瞭若指掌的人—畢竟這裡更多的是講解一些基本觀念的東西。

我時常拿程式設計師的成長與足球運動員的成長做對比。

GoF 的《設計模式》好比是世界頂級足球射門集錦,《重構》、《敏捷軟體開發》、《設計模式解析》好比是一場場精彩的足球比賽。雖然我為之瘋狂,為之著迷,可是我並不只是想做一個球迷(軟體使用者),而是更希望自己能成為一個球員(軟體設計師),能夠親自上場比賽,並且最終成為球星(軟體架構師)。我仔細地閱讀這些被譽為經典的著作,認真實踐其中的程式,但是我總是半途而廢、堅持不下去,我痛恨自己意志力的薄弱、憎惡自己輕易地放棄,難道我真的就是那麼的笨?

痛定思痛,我終於發現,比利、馬拉度納不管老、胖都是用來敬仰的,貝克漢、小羅納多不管美、醜都是用來欣賞的,但他們的球技……唉,客氣地說,是不容易學會的,客觀地說,是不可能學得會的。為什麼會這樣?原來,我學習中缺了一個很重要的環節,我們在看到了精彩的球賽、欣賞球星高超球技的同時,卻忽略了球星的成長過程。他們儘管有一定天分,但卻也是從最底層透過努力一點一點慢慢顯露出來的,我們需要的不僅是世界盃上的那定乾坤的一腳,更需要了解這一腳之前是如何練出那種神奇腳法的方法,對於程式設計師來講,精彩的程式的實現想法,要比看到精彩的程式更加令人期待。

本書顯然不是培養球星(軟體架構師)的豪門俱樂部,而是訓練足球基本功的體校,教育訓練的是初學足球的小球員(物件導向的程式設計師),本書希望的是讀者閱讀後可以打好物件導向的基礎,從而更加容易並深入理解和感受GoF 的《設計模式》以及其他大師作品的魅力。

✤ 本書定位

本書是在學習許多大師智慧結晶的圖書作品、分享了多位朋友的實踐經驗的基礎上,加之自己的程式設計感受寫出來的。正如牛頓有句名言:

「如果說我比別人看得更遠些,那是因為我站在了巨人的肩上。」

顯然本書並沒有創造或發現什麼模式,因此談不上站在巨人肩膀上而看得更遠。所以作者更希望本書能成為一些準備攀登物件導向程式設計高峰的朋友的登山引路人、提攜者,在您登山途中迷路時給予指引一條可以堅實踩踏的路線,在您峭壁攀岩不慎跌落時給予保護和鼓勵。

✤ 本書特色

本書有兩個特色。

第一個特色是重視過程。我看了太多的電腦程式設計類的圖書,大多數書籍都是在集中講授優秀的解決方案或完美的程式範例,但對這些解決方案和程式的演變過程卻不夠重視。好書之所以好,就是因為作者可以站在學習者的角度去講解問題所在,讓學習門檻降低。《重構與模式》中有一句經典之語:「如果想成為一名更優秀的軟體設計師,了解優秀軟體設計的演變過程比學習優秀設計本身更有價值,因為設計的演變過程中蘊藏著大智慧。」本人就希望能透過小菜與大鳥的對話,在不斷地提問與回答過程中,在程式的不斷重構演變中,把設計模式的學習門檻降低,讓初學者可以更加容易地理解,為什麼這樣設計才好,你是如何想到這樣設計的。

第二個特色就是貼近生活。儘管程式設計是嚴謹的,不容大話和戲說,但生活卻是多姿多彩的,而設計模式也不是完全孤立於現實世界而憑空想出來的理論。事實上所有的模式都可以在生活中找到對應。因此,透過主人翁小菜和大鳥的對話,將求職、面試、工作、交友、投資、兼職、辦公室文化、生活百味等等非常接近程式設計師生活原貌的場景寫到了書中,用一個個小故事來引出模式,會讓讀者相對輕鬆地進入學習設計模式的狀態。當然,此舉的最大目的還是為了深入淺出,而非純粹噱頭。

✤ 本書內容

本書通篇都是以情景對話的形式,用一個又一個的小故事或程式設計範例來組織的。全書共分為四個部分。

■第一部分(第 0 章)是楔子,主要是向不熟悉物件導向程式設計的讀者一個觀念說明,並透過一個例子的演變介紹類別、封裝、繼承、多形、介面、集合等概念。

■第二部分(第 4~5 章,第 11 章)是物件導向的意義和好處以及幾個重要的設計原則—透過小菜面試的失敗引出;

■第三部分(第 1~3 章、第 6~10 章、第 12~28 章)是詳細講解 23 個設計模式;


■第四部分(第 29 章)是對設計模式的複習,利用小菜夢到的超級模式大賽的場景,把所有的物件導向和模式概念都擬人化來趣味性地複習設計模式之間的異同和關鍵點;

✤ 本書人物及背景

小菜:原名蔡遙,22 歲,上海人,上海某大學電腦專業大學四年級學生,成績一般,考研剛結束,即將畢業,正求職找工作,夢想進大廠。大鳥:原名李大遼,29 歲,小菜的表哥,雲南昆明人,畢業後長期從事軟體開發和管理工作,近期到上海發展,借住小菜家在寶山的空房內。小菜以向大鳥學習為由,也從市區父母家搬到寶山與大鳥同住。

✤ 本書研讀方法

本書建議按順序閱讀,如果您感覺由於物件導向知識的匱乏(例如對繼承、多形、介面、抽象類別的理解不足)造成閱讀上的困難,不妨先閱讀楔子的「教育訓練實習生—物件導向基礎」部分,然後再從第1 章開始閱讀。如果您已經對不少設計模式很熟悉,也不妨挑選不熟悉的模式章節閱讀。

本書中的很多精華都來自許多大師作品,建議讀者透過筆記形式記錄,將會有助您的記憶和理解設計模式,增強最終的讀書效果。

✤ 關於本書學習的疑問解答

■看本書需要什麼基礎?
 
主要是Java 或其他程式語言的基礎知識,如變數、分支判斷、迴圈、函數等程式設計基礎,關於物件導向基礎可參看本書的楔子(第0章)。

■設計模式是否有必要全部學一遍?

答案是,Yes !別被那些說什麼設計模式大多用不上,根本不用全學的輿論所左右。儘管現在設計模式遠遠不止23 種,對所有都有研究是不太容易的,但就像作者本人一樣,在學習GoF 複習的23 個設計模式過程中,你會被那些程式設計大師們進行偉大的技術思想洗禮,不斷增加自己對物件導向的深入理解,從而更好的把這種思想發揚光大。這就如同高中時學立體幾何感覺沒用,但當你裝潢好房子購買家俱時才知道,有空間感,懂得空間計算是如何的重要,你完全可能遇到買了一個大號的冰箱卻放不進廚房,或買了開關門的衣櫥(移門不佔空間)卻因床在旁邊堵住了門而打不開的尷尬。

重要的不是你將來會不會用到這些模式,而是透過這些模式讓你找到「封裝變化」、「物件間鬆散耦合」、「針對介面程式設計」的感覺,從而設計出易維護、易擴充、易重複使用、靈活性好的程式。成為詩人後可能不需要刻意地按照某種模式去創作,但成為詩人前他們一定是認真地研究過成百上千的唐詩宋詞、古今名句。

如果說,數學是思維的體操,那設計模式,就是物件導向程式設計思維的體操。

■我學了設計模式後時常會過度設計,怎麼辦?

作者建議,暫時現象,繼續努力。

設計模式有四境界:

1. 沒學前是一點不懂,根本想不到用設計模式,設計的程式很糟糕;

2. 學了幾個模式後,很開心,於是到處想著要用自己學過的模式,於是時常造成誤用模式而不自知;

3. 學完全部模式時,感覺諸多模式極其相似,無法分清模式之間的差異,有困惑,但深知誤用之害,應用之時有所猶豫;

4. 靈活應用模式,甚至不應用具體的某種模式也能設計出非常優秀的程式,以達到無劍勝有劍的境界。

從作者本人的觀點來說,不會用設計模式的人要遠遠超過過度使用設計模式的人,從這個角度講,因為怕過度設計而不用設計模式顯然是因噎廢食。當你意識到自己有過度使用模式的時候,那就證明你已意識到問題的存在,只有透過不斷的鑽研和努力,你才能突破「不識廬山真面目,只緣身在此山中」的瓶頸,達到「會當凌絕頂,一覽眾山小」的境界。

✤ 程式語言的差異

本書講的是物件導向設計模式,是用Java 語言撰寫,但本書並不是主要講解Java 語言的圖書,因此本書同樣適合C#、VB.NET、C++ 等其他一些物件導向語言的讀者閱讀來學習設計模式。

就C# 而言,主要差異來自C# 對於子類別繼承父類別或實現介面用的都是":",而Java 中兩者是有區別的。

當Cat 繼承抽象類別Animal 時,C# 語法是public class Cat : Animal

當Superman 實現介面IFly 時,C# 語法是public class Superman : IFly

然後C# 中類別中的方法,如果父類別是虛方法,需要子類別指定new 或是override 修飾符號。還有一些其他差異,但基本都不影響本書的閱讀。

C++ 的程式設計師,可能在語言上會有些差異,不過本書應該不會因為語言造成對物件導向思想的誤讀。

✤ 本書程式下載

儘管本書中的程式都提供下載,但不經過讀者的自己手動輸入過程,其實閱讀的效果是大打折扣的。強烈建議讀者根據範例自己寫程式,只有在運行出錯,達不到預期效果時再查看本書提供的來源程式,這樣或許才是最好的學習方法。有問題可即時與我聯繫。部落格是cj723.cnblogs.com/。

✤ 不是一個人在戰鬥

首先要感謝我的妻子李秀芳對我寫作本書期間的全力支持,沒有她的理解和鼓勵,就不可能有本書的出版。父母的養育才有作者本人的今天,本書的出版,尋根溯源,也是父母用心教育的結果。養育之恩,沒齒難忘。

本書起源於本人在「博客園」網站的部落格cj723.cnblogs.com/ 中的連載文章《小菜程式設計成長記》。沒想到連載引起了不小的反響,網友普遍認為本人的這種技術寫作方式新穎、有趣、喜歡看。正是因為許多網友的支持,本人有了要把GoF 的23 種設計模式全部故事化的衝動。

非常感謝這些在部落格回覆中鼓勵我的朋友。

這裡需要特別提及洪立人先生,他是本人在寫書期間共同為理想奮鬥的戰友,寫作也獲得了他的大力支持和幫助。在此對他表示衷心的感謝。

寫作過程中,本人參考了許多國內外大師的設計模式的著作。尤其是《設計模式》( 作者: 簡稱GoF 的Erich Gamma,Richard Helm,RalphJohnson,John Vlissides)、《設計模式解析》( 作者:Alan Shalloway,James R. Trott)、《敏捷軟體開發:原則、模式與實踐》(作者:RobertC.Martin)、《重構—改善既有程式的設計》(作者:Martin Fowler)、
《重構與模式》(作者:Joshua Kerievsky)、《Java 與模式》(作者:閻宏)等等,沒有他們的貢獻,就沒有本書的出版。也希望本書能成為更好閱讀他們這些大師作品的前期讀物。

寫作過程中, 本人還參考了www.dofactory.com/ 關於23 個設計模式的講解,並引用了他們的結構圖和基本程式。在部落格園中的許多朋友, 比如張逸、呂震宇、李會軍、idior、Allen Lee 的博文,MSDNSmartCast 中李建忠的講座,CSDN 部落格中的大衛、ai92 的博文,網站J 道www.jdon.com 的版主banq 的文章都給本人的寫作提供了非常大的指引和幫助,在此表示感謝。另外部落格園的雙魚座先生還對本人的部分程式提出了整改意見,也表示衷心的謝意。詳細參考資料與網站連結,見附錄。

事實上,由於本人長期有看書記讀書筆記的習慣,所以書中引用筆記的內容,也極有可能是來自某本書或某個朋友的部落格、某個網站的文章。而本人已經無法一一說出其引用的地址,但這些作者的智慧同樣對本書的寫作帶來了幫助,在此只能說聲謝謝。

最後,對清華大學出版社的相關工作人員,表示由衷的感謝。
 

程杰

 

程杰 作者作品表

大話設計模式:JAVA風雲再起彩色加強版

大話資料結構(全新彩色版)

大話設計模式

* 以上資料僅供參考之用, 香港書城並不保證以上資料的準確性及完整性。
* 如送貨地址在香港以外, 當書籍/產品入口時, 顧客須自行繳付入口關稅和其他入口銷售稅項。

 

 

 

  我的賬戶 |  購物車 |  出版社 |  團購優惠
加入供應商 |  廣告刊登 |  公司簡介 |  條款及細則
 
  香港書城 版權所有 私隱政策聲明
 
  顯示模式: 電腦版 (改為: 手機版)