1. 程式人生 > >Java設計模式 - 示例教程

Java設計模式 - 示例教程

Java設計模式 - 示例教程

設計模式在軟體開發人員中非常流行。設計模式是針對常見軟體問題的良好描述的解決方案。我已經寫了很多關於java設計模式的文章。您可以訂閱我們的時事通訊下載PDF電子書(130多頁)。

 

Java設計模式

使用設計模式的一些好處是:

  1. 設計模式已經定義,並提供行業標準方法來解決重複出現的問題,因此如果我們明智地使用設計模式,它可以節省時間。我們可以在基於java的專案中使用許多java設計模式。
  2. 使用設計模式可以提高可重用性,從而實現更強大和高度可維護的程式碼。它有助於降低軟體產品的總體擁有成本(TCO)。
  3. 由於已經定義了設計模式,因此它使我們的程式碼易於理解和除錯。它可以加快開發速度,團隊的新成員可以輕鬆地理解它。

Java設計模式分為三類 - 建立結構行為設計模式。這篇文章作為我到目前為止所寫的所有java設計模式文章的索引。

 

設計模式視訊教程

最近我開始了關於設計模式的視訊教程,並將它們上傳到YouTube上。請訂閱我的YouTube頻道,因為我打算在Core Java,Spring Framework等上上傳更多視訊。

 

創作設計模式

建立設計模式提供了針對特定情況以最佳方式例項化物件的解決方案。

單例模式

Singleton模式限制類的例項化,並確保java虛擬機器中只存在該類的一個例項。它似乎是一個非常簡單的設計模式,但是當涉及到實現時,它會帶來很多實現問題。Singleton模式的實現一直是開發人員爭議的話題。檢視

Singleton Design Pattern,瞭解實現Singleton模式的不同方法以及每種方法的優缺點。這是最常討論的java設計模式之一。

工廠模式

當我們有一個具有多個子類的超類並且基於輸入時,使用工廠設計模式,我們需要返回其中一個子類。此模式負責將類從客戶端程式例項化到工廠類。我們可以在Factory類上應用Singleton模式或使工廠方法靜態。檢視工廠設計模式,例如程式和工廠模式的好處。這是最廣泛使用的java設計模式之一。

抽象工廠模式

抽象工廠模式類似於工廠模式,它是工廠的工廠。如果您熟悉java中的工廠設計模式,您會注意到我們有一個Factory類,它根據提供的輸入返回不同的子類,工廠類使用if-else或switch語句來實現這一點。

在抽象工廠模式中,我們擺脫if-else塊併為每個子類建立一個工廠類,然後是一個Abstract Factory類,它將根據輸入工廠類返回子類。檢視抽象工廠模式以瞭解如何使用示例程式實現此模式。

生成器模式

當Object包含許多屬性時,引入此模式是為了解決Factory和Abstract Factory設計模式的一些問題。Builder模式通過提供逐步構建物件的方法並提供實際返回最終Object的方法,解決了大量可選引數和不一致狀態的問題。檢視Builder Pattern,瞭解JDK中使用的示例程式和類。

原型模式

當物件建立是一項代價高昂的事情並且需要大量時間和資源並且您已經存在類似物件時,將使用原型模式。因此,此模式提供了一種機制,可將原始物件複製到新物件,然後根據需要對其進行修改。此模式使用Java克隆來複制物件。

原型設計模式要求您複製的物件應提供複製功能。它不應該由任何其他類完成。但是,是否使用物件屬性的淺或深副本取決於要求,這是一個設計決策。檢視原型模式以獲取示例程式。

 

 

結構設計模式

結構模式提供了建立類結構的不同方法,例如使用繼承和組合從小物件建立大物件。

介面卡模式

介面卡設計模式是結構設計模式之一,它的使用使得兩個不相關的介面可以一起工作。連線這些不相關介面的物件稱為介面卡。作為一個真實的例子,我們可以將移動充電器視為介面卡,因為移動電池需要3伏充電才能正常插座產生120V(美國)或240V(印度)。因此,移動充電器可作為移動充電插座和牆壁插座之間的介面卡。檢視介面卡模式以獲取示例程式及其在Java中的用法。

複合圖案

複合模式是結構設計模式之一,在我們必須表示部分整體層次結構時使用。當我們需要以一種必須以相同方式處理結構中的物件的方式建立結構時,我們可以應用複合設計模式。

讓我們用一個真實的例子來理解它 - 一個圖是一個由諸如圓形,線條,三角形等物件組成的結構,當我們用顏色填充圖形(比如紅色)時,相同的顏色也會被應用到物件中。畫畫。這裡的圖紙由不同的部分組成,它們都有相同的操作。檢視複合模式文章,瞭解複合模式和示例程式的不同元件。

代理模式

代理模式意圖是“為另一個物件提供代理或佔位符以控制對它的訪問”。定義本身非常清晰,當我們想要提供功能的受控訪問時,使用代理模式。

假設我們有一個可以在系統上執行某個命令的類。現在,如果我們使用它,它很好,但如果我們想將此程式提供給客戶端應用程式,它可能會有嚴重的問題,因為客戶端程式可以發出命令刪除一些系統檔案或更改一些您不想要的設定。檢視具有實現細節的示例程式的代理模式帖子。

Flyweight模式

當我們需要建立一個類的很多物件時,使用Flyweight設計模式。由於每個物件都佔用對於低記憶體裝置(例如移動裝置或嵌入式系統)至關重要的記憶體空間,因此可以應用flyweight設計模式以通過共享物件來減少記憶體負載。java中的String Pool實現是Flyweight模式實現的最佳示例之一。檢視Flyweight Pattern文章,瞭解示例程式和實現過程。

門面模式

Facade Pattern用於幫助客戶端應用程式輕鬆與系統互動。假設我們有一個帶有一組介面的應用程式來使用MySql / Oracle資料庫並生成不同型別的報告,例如HTML報告,PDF報告等。因此我們將有不同的介面集來處理不同型別的資料庫。現在,客戶端應用程式可以使用這些介面來獲取所需的資料庫連線並生成報告。但是當複雜性增加或介面行為名稱令人困惑時,客戶端應用程式將難以管理它。因此,我們可以在此處應用Facade模式,並在現有介面之上提供包裝器介面以幫助客戶端應用程式。檢視Facade Pattern帖子瞭解實施細節和示例程式。

橋模式

當我們在兩個介面和實現中都有介面層次結構時,橋接設計模式用於將介面與實現分離,並將實現細節隱藏在客戶端程式中。像介面卡模式一樣,它是結構設計模式之一。

橋接設計模式的實現遵循組合優於繼承的概念。檢視Bridge Pattern帖子瞭解實施細節和示例程式。

裝飾圖案

裝飾器設計模式用於在執行時修改物件的功能。同時,同一類的其他例項不會受此影響,因此單個物件將獲得已修改的行為。裝飾器設計模式是結構設計模式之一(如Adapter Pattern,Bridge Pattern,Composite Pattern),並使用抽象類或介面與組合來實現。

我們使用繼承或組合來擴充套件物件的行為,但這是在編譯時完成的,它適用於該類的所有例項。我們無法在執行時新增任何刪除任何現有行為的新功能 - 這就是Decorator模式出現的時候。檢視Decorator Pattern帖子,瞭解示例程式和實現細節。

 

行為設計模式

行為模式為物件之間更好的互動提供瞭解決方案,以及如何提供丟失耦合和靈活性以便輕鬆擴充套件。

模板方法模式

模板方法是一種行為設計模式,它用於建立方法存根,並將一些實現步驟推遲到子類。Template方法定義了執行演算法的步驟,它可以提供可能對所有或部分子類通用的預設實現。

假設我們想提供一個演算法來建造房屋。建造房屋需要採取措施 - 建築基礎,建築支柱,建築牆壁和窗戶。重要的是,我們不能改變執行的順序,因為我們無法在構建基礎之前構建視窗。所以在這種情況下,我們可以建立一個模板方法,使用不同的方法來構建房子。使用示例程式檢視模板方法模式帖子以獲取實現細節。

調解員模式

介體設計模式用於在系統中的不同物件之間提供集中式通訊介質。介體設計模式在多個物件相互互動的企業應用程式中非常有用。如果物件直接相互互動,則系統元件彼此緊密耦合,這使得可維護性成本更高並且不易靈活地擴充套件。Mediator模式側重於在物件之間提供中介以進行通訊,並幫助實現物件之間的失敗耦合。

空中交通管制員是調解員模式的一個很好的例子,其中機場控制室作為不同航班之間通訊的調解員。Mediator作為物件之間的路由器,它可以擁有自己的邏輯來提供通訊方式。使用示例程式檢視Mediator Pattern帖子瞭解實現細節。

責任鏈模式

責任鏈模式用於在軟體設計中實現丟失耦合,其中來自客戶端的請求被傳遞到物件鏈以處理它們。然後鏈中的物件將自己決定誰將處理請求以及是否需要將請求傳送到鏈中的下一個物件。

我們知道在try-catch塊程式碼中我們可以有多個catch塊。這裡每個catch塊都是處理該特定異常的處理器。因此,當try塊中發生任何異常時,它將被髮送到第一個catch塊進行處理。如果catch塊無法處理它,它會將請求轉發到鏈中的下一個物件,即下一個catch塊。如果即使最後一個catch塊也無法處理它,那麼異常將被丟擲連結到呼叫程式。

ATM分配機邏輯可以使用責任鏈模式來實現,檢查連結的帖子。

觀察者模式

當您對物件的狀態感興趣並希望在有任何更改時收到通知時,觀察者設計模式非常有用。在觀察者模式中,監視另一個物件狀態的物件稱為Observer,正在監視的物件稱為Subject

Java提供了內建平臺,用於通過java.util.Observable類和java.util.Observer介面實現Observer模式。但是它沒有被廣泛使用,因為實現非常簡單,並且大多數時候我們不希望最終擴充套件類只是為了實現Observer模式,因為java不在類中提供多重繼承。

Java訊息服務(JMS)使用Observer模式和Mediator模式來允許應用程式訂閱資料並將資料釋出到其他應用程式。檢視Observer Pattern帖子瞭解實現細節和示例程式。

戰略模式

當我們為特定任務使用多個演算法時,使用策略模式,客戶端決定在執行時使用的實際實現。

策略模式也稱為策略模式。我們定義了多個演算法,讓客戶端應用程式通過演算法將其用作引數。這種模式的最好例子之一是採用Comparator引數的Collections.sort()方法。基於Comparator介面的不同實現,物件將以不同的方式進行排序。

檢視Strategy Pattern帖子瞭解實現細節和示例程式。

命令模式

命令模式用於在請求 - 響應模型中實現丟失耦合。在命令模式中,請求被髮送到呼叫者並且呼叫者將其傳遞給封裝的命令物件。Command物件將請求傳遞給Receiver的相應方法以執行特定操作。

假設我們想要提供一個檔案系統實用程式,其中包含開啟,寫入和關閉檔案的方法,它應該支援多種作業系統,如Windows和Unix。

要實現我們的檔案系統實用程式,首先我們需要建立實際完成所有工作的接收器類。由於我們使用java介面進行編碼,因此我們可以使用FileSystemReceiver介面及其針對不同作業系統風格(如Windows,Unix,Solaris等)的實現類 。使用示例程式檢視命令模式帖子以獲取實現細節。

國家格局

當Object根據其內部狀態更改其行為時,將使用狀態設計模式。

如果我們必須根據物件的狀態更改物件的行為,我們可以在Object中有一個狀態變數,並使用if-else條件塊根據狀態執行不同的操作。狀態模式用於提供通過上下文和狀態實現實現此目的的系統和丟失耦合方式。

使用示例程式檢視State Pattern帖子瞭解實現細節。

訪客模式

當我們必須對一組相似型別的物件執行操作時,使用訪問者模式。藉助訪問者模式,我們可以將操作邏輯從物件移動到另一個類。

例如,想一下我們可以新增不同型別的專案(元素)的購物車,當我們點選結帳按鈕時,它會計算要支付的總金額。現在我們可以在項類中使用計算邏輯,或者我們可以使用訪問者模式將此邏輯移出到另一個類。讓我們在訪客模式的例子中實現這一點。檢視訪客模式帖子瞭解實施細節。

口譯員模式

用於定義語言的語法表示,並提供直譯器來處理該語法。

此模式的最佳示例是java編譯器,它將java原始碼解釋為JVM可理解的位元組程式碼。Google Translator也是直譯器模式的一個示例,其中輸入可以是任何語言,我們可以使用另一種語言來解釋輸出。

檢視直譯器模式帖子,例如程式。

迭代器模式

Iterator模式在其中一個行為模式中,它用於提供遍歷一組物件的標準方法。Iterator模式廣泛用於Java Collection Framework,其中Iterator介面提供遍歷集合的方法。

迭代器模式不僅僅是遍歷集合,我們可以根據我們的要求提供不同型別的迭代器。Iterator模式通過集合隱藏實際的遍歷實現,客戶端程式只使用迭代器方法。檢視Iterator Pattern帖子,瞭解示例程式和實現細節。

紀念品模式

當我們想要儲存物件的狀態以便稍後可以恢復時,使用Memento設計模式。Memento模式用於實現這一點,使得物件的儲存狀態資料不能在物件外部訪問,這保護了已儲存狀態資料的完整性。

Memento模式由兩個物件實現 - Originator和Caretaker。Originator是需要儲存和恢復其狀態的物件,它使用內部類來儲存Object的狀態。內部類稱為Memento,它是私有的,因此無法從其他物件訪問它。

檢視Memento Pattern以獲取示例程式和實現細節。

 

這就是java中不同設計模式的全部內容,這篇文章的目的是提供一個索引來輕鬆瀏覽所有這些模式。

 

轉載來源:https://www.journaldev.com/1827/java-design-patterns-example-tutorial