設計模式之美-王爭-極客時間-返現24元

小猿發表於2019-01-03

極客時間出品的《設計模式之美》由王爭所作,王爭是前Google工程師手把手教你寫高質量程式碼 前Google工程師,《資料結構與演算法之美》專欄作者。本專欄前Google工程師手把手教你寫高質量程式碼。

《設計模式之美》課程介紹

設計模式對你來說,應該不陌生。在面試中,經常會被問到;在工作中,有時候也會用到。一些設計模式書籍,比如大名鼎鼎的GoF的《設計模式》、通俗易懂的《Head First設計模式》,估計你也都研讀過。那你是否覺得自己已經掌握了設計模式呢?是否思考過怎麼才算真正掌握了設計模式呢?是熟練掌握每種設計模式的原理和程式碼實現嗎?

搞懂23種經典的設計模式,並不是件難事。你隨便找本書看看就差不多了。難的是如何不生搬硬套、恰到好處地將其應用到實際的專案中。即便如此,這也並不是我們的最終目標。畢竟設計模式只是解決問題的一個方法,我們最終的目標還是要寫出高質量的程式碼。

單純學習設計模式,並不能讓你寫出更好的程式碼。這就像單純地瞭解程式語言的語法,也不能算是會寫程式碼一樣。單純看書,對於設計模式的掌握、程式碼能力的鍛鍊,你只能達到10%,剩下的90%還是要靠在實戰中刻意練習。

而大部分工程師可能都是偏業務開發,在平時做的專案中,很少有高密度地使用各種設計模式的機會,所以這方面的鍛鍊肯定不多。<\/p>\n<p>因此,王爭結合自己過去十多年工作中積累的專案經驗,為每節課、每個知識點都設計了真實的程式碼例項。希望用8個月的時間,透過整個專欄200多個實戰案例,手把手帶你高強度、刻意地練習設計模式,潛移默化地提高你的設計編碼能力,教會你如何編寫高質量程式碼,幫你跨過知識到應用的鴻溝。

《設計模式之美》作者簡介

設計模式之美王爭

王爭,《資料結構與演算法之美》作者,前Google工程師,從事Google翻譯、知識圖譜等相關係統的開發。曾任某金融公司核心系統資深系統架構師,負責公司核心業務的架構設計和開發工作。工作十多年,幹過架構、做過產品、帶過團隊、創過業,最後發現還是最喜歡寫程式碼,始終沒有脫離編碼第一線。

你將獲得

23 種設計模式與正規化實戰精講

200+ 真實案例分析設計與實現

頂尖網際網路公司的程式設計經驗分享

應對設計模式面試的思路與技巧

課程設計

一、專欄會講哪些知識?

整個專欄以23種設計模式為核心,從物件導向、設計原則、程式設計規範、程式碼重構鋪開,帶你追本溯源,一次性全面掌握編寫高質量程式碼的所有知識。下面是專欄的知識概覽圖。

設計模式之美-王爭-極客時間-返現24元

二、專欄模組是怎麼設定的?

專欄共100期正文和10期不定期加餐,分為5個模組。

學習導讀部分,首先幫你明確設計模式知識的實際用途,幫你梳理最重要、最常用的7大程式碼評判標準,帶你認識整個課程的知識框架,明確學習的任務,為後面的具體學習做好準備。

設計原則與思想部分,將為你詳細講解物件導向、設計原則、編碼規範、重構技巧等基礎編碼知識。每一個知識點分別透過“理論篇”來精講,透過“實戰篇”帶你應用,透過“總結篇”帶你複習鞏固。

設計模式與正規化部分,將精講23種經典設計模式,幫你搞懂每一種設計模式的原理、核心思想和應用場景,並告訴你如何避免過度設計和設計不足,一次性徹底掌握設計模式相關的所有知識。

開源與專案實戰部分,將帶你剖析6個常用開源框架用到的設計模式、原則和思想,並透過完整的分析、設計和實現過程,手把手帶你完成4個實戰專案,將學過的理論知識應用到實戰中。

加餐部分,將隨專欄進度不定期進行更新。這一部分將和你分享作者十多年工作中總結出的學習方法、工作心得和人生經驗。

三、需要什麼基礎?

1.專欄中的程式碼是用 Java 語言實現的,但是專欄內容的講解並不與具體的程式語言掛鉤。只要你熟悉一門程式語言即可。

2.專欄重點面向偏後端的程式設計師,有一定專案經驗會更好,沒有也完全沒有關係。

本專欄為訂閱專欄,更新時間為2019年11月4日至2020年6月29日。訂閱成功後,即可透過“極客時間”App端、小程式端、Web端永久閱讀。

本專欄更新時間為每週一、三、五,形式為圖文+音訊,共計100期,定價199元。

《設計模式之美》課程目錄

開篇詞丨一對一的設計與編碼集訓,讓你告別沒有成長的1 爛程式碼!

設計模式學習導讀

01為什麼說每個程式設計師都要儘早地學習並掌握設計模式相關知識?

02從哪些維度評判程式碼質量的好壞?如何具備寫出高質量程式碼的能力? 03物件導向、設計原則、設計模式、程式設計規範、重構,這五者有何關係?

設計原則與思想

物件導向

04理論一:當我們在談論物件導向的時候,我們到底在談論什麼?

05理論二:封裝、抽象、繼承、多型分別能解決哪些程式設計問題?

06理論三:物件導向相比程式導向有哪些優勢?程式導向真的過時了嗎?

07理論四:有哪些程式碼設計看似是物件導向,實際是程式導向風格的?

08理論五:介面 vs抽象類的區別?如何用普通類語法模擬介面和抽象類?

09理論六:為何要基於介面而非實現程式設計?有必要為每個類都定義介面嗎?

10理論七:為何說要多用組合少用繼承?如何決定該用組合還是繼承?

11實戰一(上):業務開發常用的基於貧血模型的MVC架構違背OOP嗎?

12實戰一(下):如何用基於充血模型的DDD開發一個虛擬錢包系統?

13實戰二(上):如何對介面鑑權這樣一個功能開發做物件導向分析?

14實戰二(下):如何利用物件導向設計和程式設計開發介面鑑權功能?

設計原則

15理論一:對於單一職責原則,如何判定一個類的職責是否夠“單一”?

16理論二:如何做到“對擴充套件開放、修改關閉”?如何設計可擴充套件程式碼?

17理論三:裡式替換(LSP)跟多型有何區別?哪些程式碼違背了 LSP?

18理論四:介面隔離原則有哪三種應用?原則中的“介面”該如何理解?

19理論五:控制反轉、依賴反轉、依賴注入,這三者有何區別和聯絡?

20理論六:我為何說KISS、YAGNI原則看似簡單,卻經常被用錯?

21理論七:重複程式碼就一定違背DRY嗎?如何提高程式碼的複用性?

22理論八:如何利用迪米特法則(LOD)實現“高內聚、松耦合”?

23實戰一(上):針對業務系統的幵發,如何做需求分析和設計?

24實戰一(下):如何實現一個遵從設計原則的積分兌換系統?

25實戰二(上):針對非業務的通用框架開發,如何做需求分析和設計?

26實戰二(下):如何實現一個支援各種統計規則的效能計數器?

規範與重構

27理論一:什麼情況下要重構?到底重構什麼?又該如何重構?

28理論二:為了保證重構不出錯,有哪些非常能落地的技術手段?

29理論三:什麼是程式碼的可測試性?如何寫出可測試性好的程式碼?

30理論四:如何透過封裝、抽象、模組化、中間層等解耦程式碼?

31理論五:讓你最快速地改善程式碼質量的20條程式設計規範(上)

32理論六:讓你最快速地改善程式碼質量的20條程式設計規範(中)

33理論七:讓你最快速地改善程式碼質量的20條程式設計規範(下)

34實戰一(上):透過一段ID生成器程式碼,學習如何發現程式碼質量問題

35實戰_ (下):手把手帶你將ID生成器程式碼從“能用”重構為“好用”

36實戰二(上):程式出錯該返回啥? NULL、異常、錯誤碼、空物件?

37實戰二(下):重構專案中的異常、錯誤處理程式碼成可複用框架

總結課

38總結回顧:物件導向、設計原則、程式設計規範、重構技巧的核心要點

39用學過的設計原則和思想完善之前講的效能計數器專案(上)

40用學過的設計原則和思想完善之前講的效能計數器專案(下)

設計模式與正規化

建立型

41單例模式(上):為什麼說支援懶載入的雙重檢測不比餓漢式更優?

42單例模式(中):我為什麼不推薦使用單例模式?又有何替代方案?

43單例模式(下):如何實現多例模式和叢集下的分散式單例模式?

44工廠模式(上):我為什麼說沒事不要隨便使用工廠模式建立物件?

45工廠模式(下):如何設計實現一個Dependency Injection框架?

46建造者模式:如何設計實現一個簡潔易用的SQL語句生成框架?

47原型模式:如何最快速地深度clone-個HashMap雜湊表?

結構型

48代理模式:代理在懶載入、RPC、快取、監控等場景中的應用

49橋接模式:如何實現支援不同格式和渠道的訊息推送系統?

50裝飾模式:如何實現一個支援行號、高亮等功能的Grep命令?

51介面卡模式:代理、介面卡、橋接、裝飾,這四個模式有何區別?

52門面模式:如何設計合理的介面粒度以兼顧介面的易用性和通用性?

53組合模式:如何設計實現支援遞迴遍歷的檔案系統目錄樹結構?

54享元模式:如何設計實現一個最節省記憶體的文字編輯器?

行為型

55觀察者模式(上):有哪些常用的非同步處理機制及應用場景?

56觀察者模式(下):如何實現一個高效能的商品降價通知服務?

57模板模式(上):模板模式與callback回撥函式有何區別和聯絡?

58模板模式(下):如何實現一個金融系統的每月還款金額計算服務?

59策略模式(上):如何避免冗長的if-else/switch分支判斷程式碼?

60策略模式(下):如何實現一個支援擴充套件各種活動規則的促銷系統?

61職責鏈模式(上):Filters、Interceptors、職責鏈有何區別和聯絡?

62職責鏈模式(下):如何實現可靈活擴充套件演算法的敏感資訊過濾框架?

63狀態模式(上):模板、策略、職責鏈、狀態,這四者有何區別?

64狀態模式(下):如何實現一個基於狀態機的電商系統下單功能?

65迭代器模式(上):使用迭代器相比直接遍歷集合資料有哪些優勢?

66迭代器模式(下):如何設計實現一個支援“快照”功能的iterator?

67訪問者模式:如何設計實現一個簡單的編譯器語法樹解析器?

68備忘錄模式:如何設計一個支援歷史配置回滾功能的配置中心?

69命令模式:如何利用命令模式加輪訓機制搭建手遊後端架構?

70直譯器模式:如何設計實現一個自定義介面告警規則功能?

71中介模式:什麼時候用中介模式?什麼時候用觀察者模式?

72 其他模式:Null Object、Immutable、Mixin、Dirty flag 等模式

總結課

73總結回顧:23種經典設計模式的原理、核心思想和應用場景

74在實際的專案開發中,如何避免過度設計?又如何避免設計不足?

開源與專案實戰

開源實戰

75開源實戰一(上):剖析Java JDK中用到的設計模式及反模式

76開源實戰一(下):剖析Java JDK中用到的設計模式及反模式

77開源實戰二(上):剖析Unix作業系統用到的設計模式、原則及思想

78開源實戰二(下):剖析Unix作業系統用到的設計模式、原則及思想

79開源實戰三(上):剖析Google Guava用的設計模式、原則及思想

80開源實戰三(下)::剖析Google Guava用的設計模式、原則及思想

81開源實戰四(上)剖析Web容器中用到的設計模式、原則及思想

82開源實戰四(下)剖析Web容器中用到的設計模式、原則及思想

83開源實戰五(上)剖析Spring框架用到的設計模式、原則及思想

84開源實戰五(下)剖析Spring框架用到的設計模式、原則及思想

85開源實戰六(上)剖析MyBatis框架用到的設計模式、原則及思想

86開源實戰六(下)剖析MyBatis框架用到的設計模式、原則及思想

專案實戰

87專案實戰一:設計實現一個支援各種演算法的限流框架(分析)

88專案實戰一:設計實現一個支援各種演算法的限流框架(設計)

89專案實戰一:設計實現一個支援各種演算法的限流框架(實現)

90專案實戰二:設計實現一個通用的請求冪等重試框架(分析)

91專案實戰二:設計實現一個通用的請求冪等重試框架(設計)

92專案實戰二:設計實現一個通用的請求冪等重試框架(實現)

93專案實戰三:設計實現一個支援自定義規則的灰度釋出元件(分析)

94專案實戰三:設計實現一個支援自定義規則的灰度釋出元件(設計)

95專案實戰三:設計實現一個支援自定義規則的灰度釋出元件(實現)

96專案實戰四:設計實現易擴充套件協議且易整合的序列化類庫(分析)

97專案實戰四:設計實現易擴充套件協議且易整合的序列化類庫(設計)

98專案實戰四:設計實現易擴充套件協議且易整合的序列化類庫(實現)

總結課

99總結回顧:在實際軟體開發中常用的設計原則和思想、模式和正規化

100如何將設計模式、設計原則、設計思想等理論知識應用到實戰?

專欄加餐

加餐一:用一篇文章帶你瞭解專欄中用到的所有Java語法

加餐二:設計模式、重構、程式設計規範等相關書籍和資料推薦

加餐三:給你“八卦”一下Google內部員工開發能力培養機制

加餐四:如何提高專案的開發質量?來自Google的研發經驗總結

加餐五:作為程式設計師,怎麼才能讓自己走得更高、更遠、更快?

加餐六:什麼才是所謂的程式設計能力?如何評判一個人的程式設計能力?

加餐七:聊一聊如何將基礎學科知識轉化成實際的技術生產力

加餐八:聽一聽小爭哥對Google工程師文化不一樣的解讀

加餐九:作為面試官或候選人,如何面試或回答設計模式問題?

加餐十:如何接手一坨爛程式碼?如何在爛業務程式碼中晉升成長?

結束語丨聊一聊能力、機遇、運氣、方向、努力!

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章