DesignPattern - Behavioral - Iterator

Iterator Iterator 是一種行為模式,使用它來提供一種標準的方式來遍歷一組對象。我們在 Java 集合框架中廣泛使用 Iterator,其中迭代器接口提供了遍歷集合的方法。 迭代的邏輯嵌入在集合本身中,它可以幫助客戶端程序輕鬆地對其進行迭代。Iterator 對象包含公共方法,以允許客戶端對像在容器內的對象列表迭代。 Iterator 定義 interface 用來迭代或存取的接口

繼續閱讀

DesignPattern - Behavioral - Visitor

Visitor 當必須對一組相似類型的對象執行操作時,我們使用訪問者模式。借助 visitor pattern,我們可以將操作邏輯從對象轉移到另一個類。例如,考慮一個購物車,我們可以在其中添加不同類型的商品(元素),當我們點擊結帳按鈕時,它會計算出我們需要支付的總金額。現在,我們可以在項目類中包含計算邏輯,或者我們可以使用 visitor pattern 將此邏輯移到另一個類中。因此,使用 visitor pattern,我們可以將邏輯移到另一個類。 visitor pattern 允許在不更改集合中任何對象的類的情況下定義操作。為此,visitor pattern 建議在稱為 visitor類的單獨類中定義操作。這將操作與其操作的對象集合分開。對於要定義的每個新操作,都會創建一個新的訪問者類。由於操作將在一組對像上執行,因此訪問者需要一種訪問這些對象的公共成員的方法。

繼續閱讀

DesignPattern - Behavioral - State

State 當對像在其內部狀態改變時改變其行為時,我們使用狀態設計模式。我們可以將對象的狀態定義為其在任何給定時間點的確切條件,具體取決於其屬性或屬性的值。一個類實現的一組方法構成了它的實例的行為。每當其屬性值發生變化時,我們就說對象的狀態發生了變化。 首次創建 Context 對象時,它會使用其初始 State 對像對其自身進行初始化。此 State 對象成為上下文的當前 State 對象。通過用新的 State 對象替換當前的 State 對象,上下文轉換到新的狀態。當應用程序對象調用 Context 方法(行為)時,它會將方法調用轉發到其當前的 State 對象。

繼續閱讀

DesignPattern - Behavioral - Command

Command Command Pattern 是一種行為對象設計模式。在 Command Pattern 中,命令接口聲明了用於執行特定操作的方法。具體的 Command 類實現了 Command interface 的 execute()方法,這個execute()方法調用了具體 Command 類所包含的 Receiver 類的相應動作方法。此外,Receiver 類執行特定的操作。但是,客戶端類負責創建具體命令並設置具體命令的接收者。此外,Invoker 類包含對 Command 的引用,並具有執行 Command 的方法。

繼續閱讀

DesignPattern - Behavioral - Strategy

Strategy 當存在一組相關算法並且客戶端對象需要能夠從該組中動態挑選適合其當前需求的算法時,策略設計模式很有用。策略模式建議將每個算法的實現保留在一個單獨的類中。封裝在單獨類中的每個此類算法稱為策略。使用 Strategy 對象的對象通常稱為上下文對象。 當我們為特定任務有多種算法並且客戶端決定在運行時使用的實際實現時,我們使用策略模式。策略模式也稱為策略模式。我們定義了多種算法,並讓客戶端應用程序傳遞算法以用作參數。例如,此模式的最佳示例之一是 Collections.sort () 方法,該方法採用 Comparator 參數。基於 Comparator 接口的不同實現,對像以不同的方式排序。

繼續閱讀

DesignPattern - Behavioral - Observer

Observer (pub-sub) 在觀察者設計模式中,多個觀察者對象向一個主題註冊以獲取通知中的任何更改。當主題的狀態發生變化時,它會通知觀察者。監聽或觀察變化的對象稱為觀察者,被觀察的對象稱為主體。 主題為觀察者提供了一個接口,可以在主題中註冊和註銷自己。 主題知道它的訂閱者是誰。 多個觀察者可以訂閱通知。 主題發布通知。 主題只是發送通知說狀態已更改。它不傳遞任何狀態信息。 一旦收到來自主題的通知,觀察者就會調用主題並獲取更改的數據。 Subject, 註冊觀察者。對象使用此接口註冊為觀察者,也可以將自己從觀察者中移除。 Observer為對象定義了一個更新接口,這些接口應該被通知主題的變化。但是,所有的觀察者都需要實現 Observer 接口。該接口有一個方法 update(),當 Subject 的狀態發生變化時會調用該方法。 ConcreteSubject,將感興趣的狀態存儲到 ConcreteObserver 對象。當它的狀態改變時,它會向它的觀察者發送一個通知。此外,一個具體的主題總是實現主題接口。我們使用 * notifyObservers() 方法在狀態發生變化時更新所有當前的觀察者。 ConcreateObserver 維護對 ConcreteSubject 對象的引用並實現 Observer 接口。每個觀察者註冊一個具體的主題以接收更新。 public interface Subject { public void registerObserver(Observer observer); public void notifyObserver(); public void unregisterObserver(Observer observer); public Object getUpdate(); } public interface Observer { public void update(); public void setSubject(Subject sub); } //Concrete Subject public class Blog implements Subject { List<Observer> observersList; private boolean stateChange; public Blog() { this.

繼續閱讀

DesignPattern - Behavioral - Chain Of Responsibility

Chain Of Responsibility 當有多個對象可以處理或滿足客戶端請求時,責任鏈模式建議給這些對像中的每一個以某種順序處理請求的機會。在這種情況下應用該模式,這些潛在的處理程序中的每一個都可以以鏈的形式排列,每個對像都具有對鏈中下一個對象的引用。鏈中的第一個對象接收請求並決定處理請求或將其傳遞給鏈中的下一個對象。請求一個接一個地流過鏈中的所有對象,直到請求被鏈中的一個處理程序處理或請求到達鏈的末端而沒有得到處理。 顯然,責任鏈模式用於在軟件設計中實現鬆散耦合,其中來自客戶端的請求被傳遞到對象鏈以處理它們。然後鏈中的對象將自行決定誰將處理請求以及是否需要將請求發送到鏈中的下一個對象。 多個類別繼承或實作抽象, 並使用, 實作中不是自己的就 next 下去, 是自己的就 action // This's the request object.

繼續閱讀

DesignPattern - Behavioral - Mediator

Mediator Mediator 通過阻止對象顯式地相互引用來促進鬆散耦合,並且它允許您獨立地改變它們的交互。 我們使用中介者設計模式在系統中的不同對象之間提供集中的通信媒介。 中介者模式專注於在對象之間提供一個中介者進行互動,並幫助實現對象之間的丟失耦合。對像要求中介者代表它們進行交互,而不是直接相互交互。它導致可重用性和鬆散耦合。此外,它封裝了對象之間的交互,使它們相互獨立。這也允許他們通過實現不同的中介以完全不同的方式改變與其他對象的交互。調解器有助於降低類的複雜性。此外,每個對像不再需要詳細了解如何與其他對象交互。對象之間的耦合從緊緻僵硬到鬆散優雅。 中介者設計模式在多個對象相互交互的企業應用程序中非常有用。如果對象直接相互交互,系統組件就會相互緊密耦合。它們還使可維護性成本更高,並且不能靈活地輕鬆擴展。 例如,空中交通管制員是調解員模式的一個很好的例子,其中機場控制室充當不同航班之間通信的調解員。中介作為對象之間的路由器工作,它可以有自己的邏輯來提供通信方式。 Mediator: 定義一個與同事對象通信的 interface ConcreteMediator: 通過協調 Colleague 對象來實現協作行為。它還了解並維護其同事。 Colleague Classes: 每個 Colleague class 都知道它的 Mediator 對象。每位同事在本應與另一位同事溝通時都會與其調解員溝通。 public interface IMediator { public void talk(); public void fight(); public void registerA(ColleagueA a); public void registerB(ColleagueB b); } public class ConcreteMediator implements IMediator { ColleagueA talk; ColleagueB fight; @Override public void talk() { System.

繼續閱讀

DesignPattern - Behavioral - Template Method

Template Method Template Method pattern 定義了操作中算法的骨架,將一些步驟推遲到子類。 Template Method讓子類在不改變算法結構的情況下重新定義算法的某些步驟。 可以在有算法的情況下使用Template Method pattern,其中一些步驟可以以多種不同的方式實現。在這種情況下,Template Method pattern 建議將算法的大綱保留在一個單獨的方法中,該方法稱為類中的Template方法。我們可以將其稱為Template類,將算法的變體部分(可以以多種不同方式實現的步驟)的具體實現留給該類的不同子類。

繼續閱讀

DesignPattern - Structural - Decorator

Decorator Decorator 的主要目的是動態地為對象附加額外的職責。Decorator 為擴展功能提供了一種靈活的替代子類的方法。 當我們需要動態擴展對象的功能而無需更改原始類源或使用繼承時,Decorator 為我們提供了便利。這是通過在實際對象周圍創建一個稱為裝飾器的對象包裝器來實現的。 Decorator 對象與底層對象具有相同的接口。這允許客戶端對像以與底層實際對象完全相同的方式與裝飾器對象交互。Decorator 對象包含對實際對象的引用。Decorator 對象接收來自客戶端的所有請求(調用)。反過來,它將這些調用轉發到底層對象。Decorator 對像在將請求轉發到底層對象之前或之後添加了一些附加功能。這確保了附加功能可以在運行時從外部添加到給定對象,而無需修改其結構。

繼續閱讀