詳細介紹設計模式中的六大原則
單一職責原則
定義:不要存在多於一個導致類別變更的原因。通俗的說,即一個類只負責一項職責。
R里氏替換原則
定義1:如果對每一個類型為T1 的物件o1,都有一個類型為T2 的物件o2,使得以T1 定義的所有程式P 在所有的物件o1
都代換成o2 時,程式P 的行為沒有發生變化,那麼類型T2 是類型T1 的子類型。
定義2:所有引用基底類別的地方必須能透明地使用其子類別的物件。也就是說任何基底類別可以出現的地方,子類別一定可以出
現。
里氏替換原則通俗的來講就是:子類別可以擴充父類別的功能,但不能改變父類別原有的功能。它包含以下4層意義:
1). 子類別可以實作父類別的抽象方法,但不能覆寫父類別的非抽象方法。
2). 子類別中可以增加自己特有的方法。
3). 當子類別的方法重載父類別的方法時,方法的前置條件(即方法的形參)要比父類別方法的輸入參數更寬鬆。
4). 當子類別的方法實作父類別的抽象方法時,方法的後置條件(即方法的傳回值)比父類別更嚴格。
依賴倒置原則
定義:高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽像不應該依賴細節;細節應該依賴抽象。
依賴倒置原則的核心思想是:面向介面#。
傳遞依賴關係有三種方式:1.介面傳遞,2.建構方法傳遞,3.setter方法傳遞。
在實際程式設計中,我們一般需要做到如下3點:
1). 低層模組盡量都要有抽象類別或接口,或兩者都有。
2). 變數的宣告類型盡量是抽象類別或介面。
3). 使用繼承時遵循里氏替換原則。
介面隔離原則
定義:用戶端不應該依賴它不需要的介面;一個類別對另一個類別的依賴應該建立在最小的介面上。
應為客戶端提供近可能小的單獨的接口,而不是提供大的總接口。
1). 使用多個專門的介面比使用單一的總介面好。
2). 一個類別對另外一個類別的依賴性應是建立在最小的介面上的。
3). 一個介面代表一個角色,不應當將不同的角色都交給一個介面。沒有關係的接口合併在一起,形成一個臃腫的大
接口,這是對角色和接口的污染。
4). 「不應該強迫客戶依賴它們不用的方法。介面屬於客戶,不屬於它所在的類別層次結構。」
#這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫用戶使用它們不使用的方法,那麼這
#些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。
#迪米特原則
定義:一個對象應該對其他對象保持最少的了解。
顯然,介面隔離原則與廣義的迪米特原則都是對一個軟體實體與其他的軟體實體的通訊的限制。廣義的迪米特原則要
求盡可能限制通訊的寬度和深度。介面隔離原則所限制的是通訊的寬度,也就是說,通訊應盡可能地窄。
迪米特法則又叫最少知道原則,最早是在1987年由美國Northeastern University的Ian Holland提出。通俗的來講,就
是一個類別對自己依賴的類別知道的越少越好。也就是說,對於被依賴的類別來說,無論邏輯多麼複雜,都盡量地的將邏輯
#封裝在類別的內部,對外除了提供的public方法,不對外洩漏任何資訊。迪米特法則還有一個更簡單的定義:只與直接
的朋友通信。首先來解釋一下什麼是直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關
系,我們就說這兩個對象之間是朋友關係。耦合的方式很多,依賴、關聯、組合、聚合等。其中,我們稱出現成員變
量、方法參數、方法回傳值中的類別為直接的朋友,而出現在局部變數中的類別則不是直接的朋友。也就是說,陌生的類別
最好不要作為局部變數的形式出現在類別的內部。
開閉原則
一個軟體實體應當是對擴充開放,對修改關閉。
組合/聚合復用原則
要盡量使用組合/聚合,而不是繼承關係達到重複使用的目的。
以上是詳細介紹設計模式中的六大原則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在Java框架中,設計模式和架構模式的區別在於:設計模式定義了在軟體設計中解決常見問題的抽象解決方案,專注於類別和物件之間的交互,例如工廠模式。架構模式定義了系統結構和模組之間的關係,關注系統元件的組織和交互,如分層架構。

裝飾器模式是一種結構型設計模式,允許動態添加物件功能,無需修改原始類別。它透過抽象組件、具體組件、抽象裝飾器和具體裝飾器的協作實現,可以靈活擴展類別功能,滿足變化的需求。範例中,將牛奶和摩卡裝飾器添加到Espresso,總價為2.29美元,展示了裝飾器模式在動態修改物件行為方面的強大功能。

1.工廠模式:分離物件創建和業務邏輯,透過工廠類別建立指定類型的物件。 2.觀察者模式:允許主題物件通知觀察者物件其狀態更改,實現鬆散耦合和觀察者模式。

設計模式透過提供可重複使用和可擴展的解決方案來解決程式碼維護難題:觀察者模式:允許物件訂閱事件,並在事件發生時收到通知。工廠模式:提供了一種創建物件的集中式方式,而無需依賴特定類別。單例模式:確保一個類別只有一個實例,用於建立全域可存取的物件。

TDD用於編寫高品質PHP程式碼,步驟包括:編寫測試案例,描述預期功能並使其失敗。編寫程式碼,僅使測試案例通過,無需過度優化或詳細設計。測試案例通過後,優化和重構程式碼以提高可讀性、可維護性和可擴展性。

Guice框架應用了多項設計模式,包括:單例模式:透過@Singleton註解確保類別只有一個實例。工廠方法模式:透過@Provides註解建立工廠方法,在依賴注入時取得物件實例。策略模式:將演算法封裝成不同策略類,透過@Named註解指定具體策略。

適配器模式是一種結構型設計模式,允許不相容物件協同工作,它將一個介面轉換為另一個,使物件能夠順利互動。物件適配器透過建立包含被適配器對象的適配器對象,並實現目標接口,實現適配器模式。在一個實戰案例中,透過適配器模式,客戶端(如MediaPlayer)可以播放高級格式的媒體(如VLC),儘管本身僅支援普通媒體格式(如MP3)。

SpringMVC框架使用以下設計模式:1.單例模式:管理Spring容器;2.門面模式:協調控制器、視圖和模型互動;3.策略模式:根據請求選擇請求處理程序;4.觀察者模式:發布和監聽應用程式事件。這些設計模式增強了SpringMVC的功能和靈活性,使開發者可以創建高效、可維護的應用程式。
