1. 程式人生 > >讀《大話設計模式》和《head first 設計模式》心得

讀《大話設計模式》和《head first 設計模式》心得

1.面向物件的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。

2.如果你能夠想到多於一個的動機去改變一個類,那麼這個類就具有多於一個的職責。就一個類而言,應該僅有一個引起它變化的原因。

3.開放-封閉原則是面向物件設計的核心所在。遵循這個原則可以帶來面向物件技術所聲稱的巨大好處,也就是可維護、可擴充套件、可複用、靈活性好。開發人員應該僅對程式設計師呈現出頻繁變化的那些部分做出抽象,然而,對於應用程式中每個部分都刻意地進行抽象同樣不是一個好主意。拒絕不成熟的抽象和抽象本身一樣重要。面對需求,對程式的改動是通過增加新程式碼進行的,而不是更改現有的程式碼。

4.里氏代換原則:子型別必須能夠替換掉它們的父型別。只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被複用,而子類也能夠在父類的基礎上增加新的行為。(企鵝不能繼承鳥類!)

5.迪米特法則(最少知識原則):在類的結構設計上,每一個類都應當儘量降低成員的訪問許可權,也就是說,一個類包裝好自己的private狀態,不需要讓別的類知道的欄位或行為不要公開。如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用,可以通過第三方轉發這個呼叫。也就是說,不要對具體的實現程式設計,應該對介面程式設計。

6.合成/聚合利用原則:儘量使用合成/聚合,儘量不要使用類繼承。繼承是一種強耦合,組合是一種弱耦合。

7.每個地方都採用開放-關閉原則,是一種浪費,也沒必要,還會導致程式碼變得複雜且難以理解。我們需要把注意力集中在設計中最有可能改變的地方,然後應用開發-關閉原則。這牽涉到設計OO系統的經驗,和對你工作領域的瞭解。

8.要依賴抽象,不要依賴具體類。下面的指導方針,能幫你避免在OO設計中違反信賴倒置原則:

   1>變數不可以持有具體類的引用;

   2>不要讓類派生自具體類;

   3>不要覆蓋蕨類中已實現的方法。

相關推薦

迭代器模式組合模式-《Head First 設計模式

問題彙總 迭代器定義和作用 迭代器遍歷一個聚合物,並將其封裝成另一個物件。 迭代器適用場景 迭代器模式的結構和實現方法 組合模式定義和作用以及適用場景 適用於“整體/部分”的關係結構,用於統一處理所有物件(不分節點還是葉子)。 組合模式結構和實現的兩種方

大話設計模式head first 設計模式心得

1.面向物件的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。 2.如果你能夠想到多於一個的動機去改變一個類,那麼這個類就具有多於一個的職責。就一個類而言,應該僅有一個引起它變化的原因。 3.開放-封閉原則是面向

Head First設計模式——介面卡外觀模式

前言:為什麼要一次講解這兩個模式,說點騷話:因為比較簡單(*^_^*),其實是他們兩個有相似和有時候我們容易搞混概念。 講到這兩個設計模式與另外一個“裝飾者模式”也有相似,他們三個按照結構模式分類都屬於“結構性模式”,所有我們接下來就來看什麼是介面卡模式和外觀

Head First設計模式——生成器責任鏈模式

生成器 生成器模式:封裝一個產品的構造過程,並允許按步驟構造。 現又一個度假計劃指定,需要指定度假每一天的活動、旅館、用餐、門票等等事情,但是每個客人的度假計劃可能不太一樣。例如天數、活動型別、用餐等等。       我們需要一個彈性的資料結構,代表客人的規劃,以及不同的變化,

Head First設計模式——蠅量直譯器模式

蠅量 蠅量模式:如果讓某個類的一個例項能用來提供許多“虛擬例項”,就使用蠅量模式。 在一個設計房子的平臺中,周圍要加上一些樹,樹有一個座標XY座標位置,而且可以根據樹的年齡動態將自己繪製出來。如果我們建立許多樹之後,會有許多樹的例項物件。使用一個樹例項和一個客戶物件來維護“

Head First設計模式——中介者模式備忘錄模式

中介者 中介者模式:使用中介者來集中相關物件之間複雜的溝通方式和控制方式。 Bob有一個自動屋,當他的鬧鐘響了只有,鬧鐘會告訴咖啡壺開始煮咖啡。後來客戶不斷的提出許多新需求:週末不要提供咖啡、下班後需要掃地機器人掃地等。這個時候咖啡壺需要接受鬧鐘並檢查日期,而日曆需要接受鬧鐘的詢問並告訴鬧鐘是否週末,掃地機器

Head First 設計模式》學習筆記——復合模式

listener 解讀 out 部件 register != file 窗體 event 模型-視圖-控制器(MVC模式)是一種很經典的軟件架構模式。在UI框架和UI設計思路中扮演著很重要的角色。從設計模式的角度來看,MVC模式是一種復合模式。它將多個設計模式在

Head First設計模式之模板方法模式

names 去除 缺點 ide 個數 write ima 父類 public 一、定義 在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變算法結構的情況下,重定義該算法中的某些特定步驟。 比較通俗的說法,子類決定如何實現算法中的某些步驟,比如兩

Head First設計模式之外觀模式

實現 add ads important pac mar private 入口 summary 一、定義 外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。外觀定義了一個高層接口,讓子系統更容易使用。 外觀模式不只是簡化了接口,也將客戶從組件的子系統中解耦。

Head First設計模式之代理模式

collect prot indent margin 虛擬代理 ans sig smart ati 一、定義 定義:為其他對象提供一種代理以控制對這個對象的訪問 在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。 二、結構 代理模式一般會有三個角

Head First設計模式之享元模式(蠅量模式

logs sign face isp ria reat 定義 ogr sans 一、定義 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的

Head First設計模式之原型模式

webkit ble -1 否則 type sof 異常 構圖 etc 用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 原型模式是一種比較簡單的模式,也非常容易理解,實現一個接口,重寫一個方法即完成了原型模式。在實際應用中,原型模式很少單獨出現。經常與其

Head First設計模式之狀態模式

對象狀態 initial fff rst actions arc sof ret %20 一、定義 定義:允許對象在內部狀態改變時改變它的行為, 對象看起來好像修改了它的類。 主要解決:對象的行為依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行為。 何

Head First設計模式之訪問者模式

back visitor 這樣的 耦合 擴展性 表示 accept struct system 一、定義 定義:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。 訪問者模式適用於數據結構相對穩定的系統, 它把數據結

Head First設計模式之中介者模式

函數 padding sta sin color 系列文章 自己的 技術 接口 一、定義 又稱為調停者模式,定義一個中介對象來封裝系列對象之間的交互。中介者使各個對象不需要顯示地相互引用,從而使其耦合性松散,而且可以獨立地改變他們之間的交互。 二、結構 組成:

Head First設計模式之解釋器模式

mes eval form value oid 對象 arc share hive 一、定義 給定一個語言,定義它的文法表示,並定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子。 主要解決:對於一些固定文法構建一個解釋句子的解釋器。 何時使用:如果一種特定類型的

Head First設計模式之責任鏈模式

sre apple ria tap 空調 href 一個 -o webkit 一、定義   避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。   主要解決:職責鏈上的處理者負責處理請求,

Head First 設計模式》之裝飾者模式

的人 開放 override ext es2017 必須 想要 ret ted 前言:   時間過得挺快的,轉眼間就到了十月中旬了,再晃著晃著新的一年就要來臨。今天lz有幸來到了浙大圖書館來學習,想想自己已經畢業兩年了,今日再次踏進校園裏,心裏頗有一絲感悟,說不出來,只有把

Head first設計模式》學習筆記 – 叠代器模式

sys sorry 微軟雅黑 封裝 system ready 3.5 消息 all 《Head first設計模式》學習筆記 – 叠代器模式 代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。 爆炸性新聞:對象村餐廳和對象村煎餅屋合並了!真是

Head First 設計模式“ :裝飾模式

裝飾模式 裝修模式 JAVAIO裝飾模式 裝飾模式 裝飾者模式:動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。 裝修模式的角色如下:抽象構件角色(Component):給出一個抽象接口,以規範準備接收附加責任的對象。具體構件角色(Concrete Com