易燃物匯聚 YouTube 有聲書與書評
人人都懂設計模式:從生活中領悟設計模式(Python實現) 封面

人人都懂設計模式:從生活中領悟設計模式(Python實現)

羅偉富

9054人在讀
11萬字總字數
¥55.3定價

內容簡介

設計模式(Design Pattern)是一套被反覆使用、多數人知曉、無數工程師實踐的代碼設計經驗的總結,它是面向對象思想的高度提煉和模板化。 本書帶你一起從生活的角度思考設計模式,以輕鬆有趣的小故事開始,由淺入深地講解每一種模式,思考每一種模式,總結每一種模式!力求用更通俗的語言闡述難懂的概念,用更簡單的語法實現複雜的邏輯,用更短小的代碼寫出強悍的程序! 使枯燥乏味的概念變得更有樂趣和意義,希望能帶給讀者一種全新的閱讀體驗和思考方式。 本書首先講解了23種經典設計模式,其中19 種在現今的軟件開發中常用的設計模式分別用單獨的章節進行了詳細講解,剩餘設計模式作爲一個合集放在一章中進行了講解;其次講解了對基礎設計模式的衍生,也是各大編程語言中非常重要而常見的各種編程機制,如過濾器模式、對象池技術、回調機制和MVC模式;最後作者結合自身的工作經驗和項目積累,分享了他對設計模式、設計原則、項目重構的理解和看法。Python作爲AI時代最重要的一種計算機語言,其在各大語言中的排名也逐年上升!本書所有示例代碼均用Python編寫,將會是國內不可多得的一本用Python來講解設計模式的書。 本書適合的讀者:一線互聯網軟件開發者、有一定編程基礎的IT新人、對設計模式和編程思想感興趣的人士。

讀者書評

★★★★★

很有意思呀,難爲作者想一堆故事了

★★★★☆

設計模式的核心是:組織與分工.。

★★★★★

Python的,有生活例子沒那麼枯燥,適合快速回顧設計模式的知識

★★★★★

通俗易懂,初步理解了設計模式,接下來就是多多實踐總結了

★☆☆☆☆

設計模式幾乎是面向對象領域的聖經,本書通過故事和代碼講解了傳統的23種設計模式,以及新出現的模式。講解方法並不新穎,思考也不夠深刻,代碼說是python,但是不夠 pythonic ,沒有太多閱讀價值。

★★★★★

這本書不像其他技術書一樣,用專業術語解釋專業術語,而是從生活例子出發,由淺入深,非常適合工作經驗不足的小白來讀,以下是我個人讀完做的筆記,略顯潦草。 1,監聽模式(觀察者模式) 監聽水溫,根據不同水溫做出不同反應 一對多(一個監聽對象observable,多個觀察者observer) 發佈——訂閱 要點: 1,明確對象,誰是被觀察,誰是觀察者 2,被觀察者發送廣播通知時,無需指定具體觀察者,觀察者可以自己決定是否訂閱subject 3,被觀察者至少3個方法,添加監聽者,移除監聽者,通知監聽者 觀察者至少一個方法,更新方法,更新當前內容,並作出處理 4,推模型,被觀察者只推送信息(管你要不要),拉模型,觀察者拉去所需信息 實戰: 賬戶安全檢測 每次登錄記錄時間,地區,如果地區間隔很多,短信郵箱通知登錄異常 消息推送 服務器信息更新,消息通知客戶端 應用: 1,一個對象的更新依賴於另一個對象的更新 2,對象只需要把更新通知給其他對象,無需知道其他對象的細節 2,狀態模式 水——狀態——固液氣(固,硬,水,流動,氣,輕) 對象內部狀態發生改變,表現得行爲和外在屬性不同 一個對象有多種狀態,每種狀態得表現行爲和屬性不同 狀態類,(實現1,實現2) 上下文環境類,負責具體狀態切換 1,決定狀態屬性stateinfo 2,判斷狀態是否符合當前狀態 3,傳入信息 每個狀態只有唯一實例 優:封裝狀態轉換規則,與某個狀態有關的行爲放在一個類中,允許狀態轉換邏輯與狀態對象合爲一體 缺:增加對象個數,結構複雜,使用不當造成代碼混亂 應用: 多分支條件語句,分支依賴於對象狀態 3,中介模式(調停模式) 告訴中介房子需求,中介提供房源信息 使用中介對象來封裝一系列的對象交互,松耦合 角色:交互對象(進行交互的一系列對象),中介者(協調對象間的交互),具體中介者(中介的具體實現) 優:1,對象行爲集中在一起,簡化對象交互,2,關係簡化(多對多轉化成一對多) 缺:1,交互複雜度轉移到中介複雜度,中介類難以維護 2,中介有問題會導致多個使用者出現問題 實戰:社交軟件,PC端繁雜設備交互(揚聲器,麥克風,攝像頭) 應用:1,一組對象定義良好,通信方式複雜,2,引用很多對象,中間類封裝多個類行爲,3,不生成太多子類 4,裝飾模式 逛商店,買衣服裝飾自己 動態的給一個對象添加一些額外的職責 動態的給一個類增加額外的功能,而不改動原有的代碼 裝飾器的作用:包裝一個函數,並改變它的行爲 要點:可靈活給一個對象增加職責或者拓展功能,可增加任意多個裝飾,裝飾順序不同,產生的效果不一樣 優點:1,實現擴展更靈活(比繼承)2,可以動態給一個對象附加更多功能 3,多重裝飾 4,裝飾類獨立發展,不會耦合 缺點:1,容易出錯,排錯困難(比繼承) 應用:過濾器 5,單例模式 愛情中的唯一 確保一個類只有一個實例,並提供一個訪問它的全局方法 應用:項目中的全局管理類 6,克隆模式(原型模式) 通過拷貝自身屬性來創建一個新的對象 克隆過程: 1,分配一塊新的內存空間給新對象 2,拷貝對象所有屬性 淺拷貝:只拷貝引用類型對象的指針(一個對象的改變會引起另一個對象的改變) 深拷貝:拷貝引用類型對象指針指向的值(相互獨立,你改你的,我改我的,又稱安全模式) 優點:可以創建一個相同屬性的複雜對象 缺點:不會執行類的初始函數 應用:1,創建新對象成本高,創建新對象複雜,2,類初始化消耗大。 7,職責模式(責任鏈模式) 例子:假條批准過程 將請求者與接收者解耦 將接收對象連接成一條鏈,讓請求連着這條鏈傳遞,直到有對象對請求進行處理 當請求者發送請求,接收者接收請求,接收者鏈中,每個人只處理自己職責範圍內的請求,自己請求不了的,傳遞給下一個接收者 責任者有一個指向自身的引用,也就是下一個責任人,而pA,PB爲責任者的實現類 要點:1,請求者,請求內容的確定 2,責任人有哪些 3,對責任人抽象處理 4,責任人可自由組合 優:1,降低耦合度,簡化對象,增強給對象指派職責的靈活性,增加新處理類很方便 缺:1,不能保證請求一定被接收,系統性能受影響,代碼調試時會造成循環調用 應用:1,多個對象處理請求,哪個對象處理自動確定 2,請求處理具有明顯得層層傳遞關係 3,請求處理流程和順序需要程序運行動態確定 4,常見審批流程(賬務報銷,轉崗申請) 8,代理模式 讓別人幫自己做事,本該我去拿快遞,但是沒時間,告訴家人,讓他去拿 爲其他對象提供一種代理以控制對這個對象的訪問 三角色: 主題:定義操作,活動,任務的接口類 真實主題:真正完成操作,活動,任務的具體類 代理主題,代替完成操作,活動,任務的代理類 優點:協調調用者與被調用者,降低系統耦合,靈活隱藏被代理對象的部分功能和服務,增加額外的功能和服務 缺點:請求處理速度緩慢,有些代理模式複雜 應用:代理對象專門下載小圖,只有用戶點擊圖片的時候,才下載大圖 遠程代理,虛擬代理,防火牆代理 9,外觀模式 生活例子:我去上大學,遇見學姐,學姐熟悉校園,帶我辦好入學所需要的流程,提供一條龍服務 用一個簡單的接口封裝一個複雜的系統,使系統更容易使用,使用者不需要知道內部的邏輯 角色:外觀角色(爲子系統封裝統一的對外接口),子系統(多個類組成具有某一特定功能的子系統) 優:1,子系統與客戶端的松耦,2,簡化客戶端對子系統的使用難度,3,爲不同用戶提供了統一的調用接口 缺:1,統一的調用接口降低了系統的靈活性 實戰:文件解壓與壓縮 應用:1,爲一個複雜子系統提供一個簡單接口 2,客戶程序與多個子系統間存在很大依賴性 3,層次化結構中,使用外觀模式定義系統中每一層的入口,降低層之間的耦合度 10,迭代模式 生活例子:醫生診斷病人,診斷完病人之後,排號系統自動爲醫生呼叫下一個病人 定義:提供一種方法順序地訪問一組聚合對象(容器)中的各個元素,而又不需要暴露該對象的內部細節 兩種方法:1,獲取當前所指元素,2,將指針移至下一個元素 豐富迭代器功能:1,指針移至起始位置,2,指針移至結尾位置,3,獲取當前所指元素,4,指針移至下一元素,5,指針移至上一元素 要點:1,瞭解容器數據結構以及層次結構 2,根據需要確定迭代器功能 優點:1,存儲數據和遍歷數據職責分離,2,簡化聚合函數訪問方式,3,可支持多種不同方式遍歷一個聚合對象 缺點:1,額外增加迭代器功能實現,增加新聚合類時需要新迭代器 應用:1,內部結構複雜,不想暴露對象內部細節,2,提供統一的訪問接口,3,需要爲聚合對象提供不同訪問方式 11,組合模式 生活例子:組裝電腦 定義:將對象組合成樹形結構,表示整體與部分的層次結構關係,組合使得用戶對單個對象和複合對象的使用具有一致性 要點:1,理清部分與整體的關係,2,組合模式是一種樹形結構,葉子節點是具體的組件,具有子節點的組件爲複合組件 優點:1,調用簡單,組合對象可以像一般對象那樣調用,2,組合對象可以自由增刪 缺點:在層次太深的場景中,組合結構會變龐雜 應用:公司組織架構,文件與文件夾 12,構建模式(建造者模式,生成器模式) 生活例子:積木可搭成小車,也可搭成莊園 定義:將複雜對象構建過程和它表現分離,使得同樣的構建過程可以獲取不同的表現 (將各種部件通過一定方式和流程構造成一個成品的過程) 區別:工廠模式關注整個產品的生成,構建模式關注產品的創建過程和細節 組合模式關注對象內部組成結構,強調部分與整體關係,構建模式關注對象創建過程 要點:產品,構建者,指揮者 優點:1,產品的創建過程與產品本身分離,2,分解創建過程,精準控制複雜對象的創建過程,3,具體構建者相對獨立,可隨意調用 缺點:1,增加很多創建類,系統龐雜,2,產品結構相差很大,構建模式很難適應 應用:1,適用於產品構建過程複雜,2,產品種類多,不同的組合,將創建不同的產品 13,適配模式(變壓器模式) 不同國家的插座不同,需要轉換器進行轉化,八字口轉爲二字口 將一個類的接口轉換成客戶端所期望的端口,從而使兩個接口不匹配而無法工作的兩個類能夠一起工作 三個角色:目標(Target),源對象(Adaptee),適配器(Adapter) 優點:可以讓兩個沒有關聯的類一起運行,提供類的複用率,靈活性好,不會破壞原有系統 缺點:過多使用適配器,使得代碼結構混亂 應用:電子書閱讀器,前期支持txt,epub格式解析,後期適配第三方pdf源庫 1,系統目前需要使用某些類,而這些類不符合要求, 2,新功能拓展,接入第三方的接口或者sdk 14,策略模式 採取什麼的交通方式不要緊,重要的是能準時到聚會場所 根據自己的實際情況選擇不同的交通方式, 定義一系列的算法,使每個算法都封裝起來,並可以相互替換, 三個角色: 上下文環境,承上啓下的封裝作用,屏蔽上層應對策略的直接訪問,封閉可能存在的變化 策略的抽象,定義統一接口,規定每個子類必需實現的方法 具備的策略,策略的具體實現者,可以有多個不同的實現 優點:算法可自由切換,避免多重條件判斷,方便拓展加新 缺點:所有策略類都需要對外暴露 應用:sort函數,根據身高或者體重來排序 15,工廠模式 加入不同配料到咖啡機(工廠類)裏,產生不同口味的咖啡(產品類) 簡單工廠模式,工廠方法模式,抽象工廠模式(工廠模式的逐漸升級) 簡單工廠模式(一個工廠類,類中一個創建方法) 一個咖啡機生產摩卡和拿鐵 定義一個創建對象的接口,通過參數決定創建哪個類的實例 優點:實現簡單,結構清晰,無需關心對象的類名稱,只需知道傳入什麼參數可以創建什麼對象 缺點:不宜拓展,產品類型過多也會導致工廠創建邏輯複雜 工廠方法模式(多個工廠類,類中一個創建方法) A咖啡機生產摩卡,B咖啡機生產拿鐵 優點:解決了簡單工廠模式不符合“開放——封閉”原則問題, 缺點:實現簡單 抽象工廠模式 一個抽象工廠類,有三種方法(生產冰箱,洗衣機,空調) 兩個具體工廠類(生產節能型產品,生產高效型產品) 優點:解決了具有二級分類產品的創建 缺點:產品分類>2,抽象工廠模式更加臃腫,所以無法解決多分類,多組合的問題 適用於某一個產品族,產品等級結構穩定 產品多級分類,1,對產品進行歸納整合 2,交給產品類自己創建 spring容器啓動 1,讀取bean.xml文件配置,將bean元素分別轉換成一個個的BeanDefinition對象 2,然後通過BeanDefinitionRegistry將這些bean註冊到beanFactory中 16,命令模式 生活例子:客戶下單,服務員將訂單傳送給廚師,廚師根據訂單做餐 定義:將請求封裝成一個對象(高內聚模式),使用不同的請求將客戶端參數化,對請求排隊或記錄請求日誌,可以提供命令的撤銷和恢復功能 命令與接收者捆綁,調用方不必關心執行者如何執行,只需發送命令即可 角色:命令,接收者,調度者,用戶 優點:1,將命令發送者與接收者進行解耦,2,方便的增加新命令 缺點:1,系統中有很多命令,每一個命令需要具體類去封裝,使得命令急劇膨脹 應用:GUI按鈕點擊命令,遊戲裏命令組合(宏命令) 17,備忘模式 例子:好記性不如爛筆頭 定義:在不破壞內部結構的前提下捕獲一個對象的內部狀態,方便以後將該對象恢復到原先保存的狀態 保存一個對象的狀態作爲備份,可讓對象在將來某一時刻恢復到之前的保存狀態 要點:發起人,備忘錄,備忘錄管理者 優點:1,提供一種可恢復得機制,使得用戶能夠恢復到某個歷史狀態,2,實現信息封裝,無需關心狀態的保存細節 缺點:1,如果類的成員變量過多,務必會佔用過多資源,每次保存都會消耗一定內存,可限制保存次數 應用:1,需要保存/恢復對象的數據,2,需要撤銷恢復的場景,3,提供可回滾的操作 18,享元模式 例子:顏料很貴,充分利用 定義:運用共享技術有效地支持大量細粒度對象的複用 內部狀態:不會隨環境改變的狀態,外部狀態:隨環境改變的狀態 要點:享元對象(期望共享的對象),享元工廠(創建管理享元對象) 應用:系統中有大量相似對象,使用時容易造成內存消耗 19,訪問模式 例子:不同的人從一本書中看到了不同的價值 定義:封裝一些作用於數據結構下的元素操作,不改變數據結構下,定義作用於元素的新操作 要點:訪問者,數據節點,對象結構 優點:數據和操作分離,降低耦合,增加訪問操作更方便,讓用戶不修改現有元素層次結構情況下,定義作用於該層次結構的操作 缺點:增加新元素類很困難,破壞數據對象的封裝性 應用:1,對象結構的類型少,2,一個對象結構包含多個類型對象,希望對這些對象實施一些依賴其具體類型的操作, 3,需要對一個對象結構進行不同的操作 【經典模式】 20,模板模式 定義:定義一個操作框架,將具體操作放在子類實現 應用:1,提取固定的部分作爲模板,通過子類來進行個性化操作。 2,即不變的給框架,變得給子類 3,公共部分給父類,通過子類決定父類算法是否執行,實現子類對父類的反向控制 21,橋接模式 定義:將抽象與實現分離,使得各自可以獨立變化,側重軟件結構 應用:一個產品有多種分類和組合,多個維度的變化,過度使用繼承導致的臃腫 22,解釋模式 定義:定義一種語言,定義它的文法的一種表示,並定義一個解釋器,解釋器使用文法來解釋語句 應用:常用於數據分析,統計和報表分析領域 【進階篇】 1,過濾器模式 例子:豆漿機很重要,過濾網更關鍵 要點:過濾目標,過濾器,過濾鏈(管理過濾器) 優點:過濾對象,過濾規則可重複利用 缺點:性能低,每個過濾器都會對每個元素過濾一遍 應用:敏感詞條過濾,輿情監測,數據校驗審覈,網絡攔截 2,對象池技術 例子:共享單車,被借用的不可使用,歸還之後可以使用 對象池:集合,已經初始化且可以使用的對象,數量有限,用完歸還(池子,借用,歸還) 類似享元模式,但是享元模式可以修改對象,破壞數據一致性,對象池解決這個問題 核心對象:池化對象,對象池 關鍵動作對象:借用,使用,歸還 優點:重複利用,節約內存,提升性能 缺點:用完必需歸還,佔用對象不可引用,需要程序員手動借用和歸還(引用計數器,多一個使用者引用+1,減少一個使用者-1) 應用:數據庫連接池,線程池 3,回調機制 例子:每個員工表演自己的絕技 定義:把函數當作參數傳遞給另一個函數,延遲到另一個函數的某個時刻執行 callback 函數式編程:將大段代碼拆分成一個個函數,一層層調用 回調函數(作爲參數的函數),高階函數(接收回調函數) 優點:可維護性,避免重複,拓展性 缺點:多重調用,可讀性差 同步執行:前一個任務完,後一個任務纔開始執行 異步執行:同時執行兩個任務 應用:第三方庫,異步執行 4,MVC模式 例子:相機不同零件發揮不同功能 對模塊分層,Model 數據存儲,View 數據顯示 ,Controller 業務邏輯(是model與view的中介 V——C——M——V 單向循環通信 MVP模式(P相當於C) V——P,P——V || M——P,P——M P與M,P與V雙向通信,M與V不能直接通信,只能通過P協調 MVVM模式(Model-View-ViewModel) Model-View的數據自動同步化,指定Model-View的數據對應,交給框架自動綁定 VUE,專注ViewModel,數據雙向綁定(Model修改,View更新。View修改,Model更新),輕量級JS庫 優點:低耦合,高重用性,快速開發 缺點:系統結構複雜性提高 設計模式原則(solid) 單一職責原則(SRP) 表明一個類有且只有一個職責(T負責p1和p2,修改P1影響P2,將T分解爲s1,s2,s1只負責p1) 開放封閉原則(OCP)一個類應該對擴展開放,對修改關閉 里氏替換原則(LSP)派生的子類應該是可替換基類的,也就是說任何基類可以出現的地方,子類一定可以出現 接口隔離原則(ISP)類不應該被迫依賴他們不使用的方法,也就是說一個接口應該擁有儘可能少的行爲,它是精簡的,也是單一的。 依賴倒置原則(DIP)表明高層模塊不應該依賴低層模塊,相反,他們應該依賴抽象類或者接口

★★★★☆

挺好的一本書,看的人咋這麼少。 作者的一個比喻很形象,設計模式在編程中的作用,就像《孫子兵法》對於打仗的作用。設計模式是前輩歸納出來的指導思想,對設計模式的理解不能紙上談兵,豐富的項目經驗是很重要的。同時做項目的過程中,我們無意中也已經用到了一些設計模式。不同的工作階段再來看看這些理論,會有不同的收穫。 這本書用的小故事很貼切,又有代碼示例,讀起來不會很枯燥,我就是從那個《設計模式之禪》半路跑過來的。美中不足的就是一些圖片的排版有些問題。

★★★★★

好書 今年負責的項目,部門的項目要重構,所以重溫了一遍設計模式,設計模式的書看過很多本,這本能排前二 通俗易懂,深入淺出 雖然我本身是Java技術棧,該書是python實現,但是不影響設計模式思想的理解,在我們的生活,工作中,設計模式無所不在,它是針對某些重複問題的通用解決方案,它對變化友好,降低了變動的成本 spring框架,動態代理的實現減少了大量冗餘代碼 生活中,高德地圖推薦你各種出行方式,就是策略模式 找中介買房,中介者模式 讓別人代拿快遞,代理模式 帶着目標去學習,學以致用,學習才能更有效率,共勉

★★★★☆

這本確實讀起來通俗易懂,非常適合入門。當時找書的時候我的目標就是“一本能夠幫我在設計模式上掃掃盲的書”,讀完之後覺得這本書非常符合我的需求。 我想對於新手來說,一本入門書不需要太高深,不需要像黑皮書系列一樣讓我望而卻步,通俗的講解讓我對概念有一定了解就可以了。畢竟設計模式是需要大量的代碼量和項目開發經歷所支撐的。

★★★★☆

大致看了一下內容,也算是國人寫的比較與時俱進的參考資料。不足在於排版檢查,存在打印錯誤。 總體上還是贊。

書籍信息

作者羅偉富
出版社電子工業出版社
出版時間2019-04-01
ISBN9787121361128
分類計算機-編程設計
格式EPUB
完結狀態連載中
章節數36