(P03)
設計模式是實際經驗的積累和總結,着重解決具體的實際問題;
(P04)
在程序中要儘量使用抽象類型作爲對象實例變量類型,這樣就保證了將客戶程序與具體實現之間解耦,因爲使用的是抽象類型,因此具體實現的改變不會影響抽象類型的改變;
“對象組合” —— 是指在一個對象中含有另外一個對象的引用,從而可以使用該內部對象的引用作出一些處理行爲;
“開-閉原則”是一種很抽象的設計原則,更像是一種倡導的口號,其他設計原則都是爲了實現“開-閉原則”的具體原則;
(P5)
設計模式或將成爲改變一個人職場命運、一個企業成敗關鍵、甚至一個社會經濟發展的重要因素;
設計模式就像一本武功祕笈,要在學習中有所思、有所想、有所悟,才能達到軟件設計思想的最高境界;
(P5)
設計模式分類:
按照範圍來分,設計模式可以分爲“類模式”和“對象模式”:
“類模式” —— 用來處理類和子類之間的關係,這些關係通過繼承建立,是靜態的,在編譯時刻便確定下來了;
“對象模式” —— 是處理對象間的關係,這些關係在運行時是可以變化的,更具動態性;
按照目的來分,設計模式可以分爲“創建型模式”、“結構型模式”和“行爲型模式”:
“創建型模式” —— 用來處理對象的創建過程;
“結構型模式” —— 用來處理類或者對象的組合;
“行爲型模式” —— 用來對類或對象怎樣交互和怎樣分配職責進行描述;
按照目的的分類是採用最多的分類方式;
(P7)
讓理論指導實踐,實踐充實理論,這樣就會形成一種良性循環,不斷提升自己的理論、實踐能力;
(P49)
所謂“對象組合”,就是讓對象作爲類的成員變量,通過構造函數或者 set 方法給類對象的實例變量賦值;
一般“抽象工廠”和“工廠方法”都是聯合在一起使用,這樣的系統結構更加具有靈活性和彈性;
當設計一個軟件系統的時候,要儘可能地對系統中出現的各種事物進行抽象,從而建立基礎的抽象底層,這樣做的目的就是讓軟件結構更加框架化、系統化,系統結構更加靈活,易維護、易擴展;
(P50)
抽象和具體實現的區別就在於:有了抽象,能做很多事情,並且新增功能不會對原系統的穩定性造成影響,系統更加模塊化,軟件更加易複用;而具體實現只能完成一件事情,並且新增功能對原系統影響比較大,對於相同結構軟件不能複用,大大降低了開發效率,而且程序不易擴展;
(P51)
“工廠方法模式”和“抽象工廠模式”的區別:
“工廠方法模式”通過繼承的方式實現應用程序的解耦,而“抽象工廠模式”則通過對象組合的方式實現程序解耦;
“工廠方法模式”用來創建一個抽象產品,具體工廠實現工廠方法來創建具體產品,而“抽象工廠模式”用來創建一個產品家族的抽象類型;
(P72)
“建造者模式”和“抽象工廠模式”的區別:
“建造者模式”着重於分步驟構造一個複雜對象;“抽象工廠模式”着重於多個系列的產品對象的構造;
“建造者模式”是在最後一步返回具體產品;“抽象工廠模式”是立即返回具體產品;
(P81)
在 Java 中,只有實現了 Cloneable 接口的類纔會被虛擬機認爲是能夠克隆的;
(P129)
類適配器和對象適配器是外部對象和適配器的一種關聯關係,類適配器使用繼承方式,它是一種強關聯關係,而對象適配器是利用組合的方式,將外部對象傳入,它是一種弱關聯關係;
(P133)
適配器設計模式主要用於系統的升級擴展,或者版本兼容性上,沒有哪一個系統分析師會在軟件設計階段使用適配器模式的。適配器模式可以很好地解決版本兼容問題;
(P139)
“耦合” —— 就是兩個實體的行爲的某種強關聯;
“脫耦” —— 將它們的強關聯去掉,就是耦合的解脫,或稱脫耦;
橋接模式中的脫耦,就是指在一個軟件系統的抽象化和實現化之間使用組合/聚合關係而不是繼承關係,從而使兩者可以相對獨立地變化;
(P147)
橋接模式的魅力就在於將抽象和實現解耦,從而使兩者可以相對獨立地變化,而互不影響;
(P155)
軟件設計模式的初衷就是爲了解決軟件複用、內聚、耦合等問題。在類與類之間,應該儘量使用弱關聯的關係,如果兩個類的關係確實非常緊密,則使用繼承的強類型關係。一般情況下,要儘量避免使用高耦合度的設計方式;
(P156)
繼承是一種牢不可分的強關聯關係,而聚合的委託關係則是一種弱關聯關係,後者有利於類之間的解耦;
(P182)
組合模式,主要處理樹形結構以表示“部分-整體”的層次結構;
(P206)
設計模式是封裝變化的最好闡釋,無論哪一種設計模式針對的都是軟件系統中存在“變化”的部分,然後使用抽象對這些“變化”的部分進行封裝;
(P223)
外觀沒有封裝子系統的類,只提供簡化的接口;
(P381)
在一個軟件項目的設計中,一般不建議採用中介者模式;
(P463)
抽象類應當擁有儘可能多的行爲,應當擁有儘可能少的數據;
(P499)
訪問者模式適用於數據結構相對穩定算法又易變化的系統,因爲訪問者模式使得算法操作增加變得容易。如果系統數據結構對象易於變化,經常有新的數據對象增加進來,則不適合使用訪問者模式;
(P509)
“開-閉”原則告訴我們,一個軟件實體對於外部的需求變化,應該通過擴展來實現,而不是修改現有的內容來實現;
(P510)
在設計一個軟件系統結構時,儘可能地將會發生變化的內容獨立出來,單獨進行封裝,而將這一部分作爲抽象爲其他部分調用;
(P528)
依賴倒置原則是實現“開-閉”原則的重要途徑,在程序中要儘量使用抽象類型作爲對象實例變量類型,這樣就保證了將客戶程序與具體實現之間解耦;
(P536)
依賴倒置原則的核心是依賴抽象編程,而不依賴具體實現類;
接口屬於客戶,不屬於它所在的類層次結構;
(P544)
在實際的軟件設計中需要面向抽象編程,在程序中使用抽象類型作爲參數類型,然後將具體的子類型作爲實際運行的參數傳入,實現具體的行爲處理;
(P545)
迪米特法則實現要點是:儘量不要讓類和類之間建立直接的關係,如果需要建立關係,最好通過其友元類來中轉建立關係;
《設計模式那點事》 - 書摘精要
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
《設計模式那點事》 - 書摘精要
GATTACA2011
2018-09-12 03:57:49
《OOD啓思錄》 - 書摘精要
GATTACA2011
2019-07-19 14:01:52
《Java程序員職場全攻略 從小工到專家》 - 書摘精要
GATTACA2011
2019-02-22 21:46:13
《領域驅動設計 軟件核心複雜性應對之道》 - 書摘精要
GATTACA2011
2019-02-22 21:45:48
《設計模式其實很簡單》 - 書摘精要
GATTACA2011
2019-02-22 21:45:44
《易學 設計模式》 - 書摘精要
GATTACA2011
2019-02-22 21:45:44
《修煉Java開發技術 在架構中體驗設計模式和算法之美》 - 書摘精要
GATTACA2011
2019-02-22 21:45:44
《ASP.NET夜話》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《領域驅動設計與模式實踐》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《修改代碼的藝術》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《模式 工程化實現及擴展 (設計模式 C#版)》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《深入理解 C# 第2版》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《企業應用架構模式》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《領域驅動設計 C# 2008 實現》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
《軟件設計精要與模式 第2版》 - 書摘精要
GATTACA2011
2019-02-22 21:45:42
24小時熱門文章