設計模式 學習筆記 5 命令者式

2022-03-11 10:12:32 字數 2745 閱讀 4833

比如我們要設計乙個dos命令模擬器,它可以接受輸入的命令並做出響應。

0.首先我們的dos模擬器支援三個大類的功能:檔案操作類(filekit)、展示類(displaykit)、網路類(netkit)

1.建立抽象命令模板(預設所有的命令都可以使用上述三大類):

public

abstract

class

command

2.編寫具體命令:(這個就是命令的具體操作,可以看出是多個類協同合作的結果)

public

class deletecommand extends

command

}

3.編寫呼叫器:(接受命令執行命令)

public

class

invoker

public

void action() //

呼叫命令的execute()方法

}

4.客戶端呼叫

public

class

main

}

說明:在軟體系統中,「行為請求者」與「行為實現者」通常呈現一種「緊耦合」。但在某些場合,比如要對行為進行「記錄、撤銷/重做、事務」等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將「行為請求者」與「行為實現者」解耦?將一組行為抽象為物件,實現二者之間的松耦合。這就是命令模式(command pattern)。[1] 

通用類圖:

說明:● receiver接收者角色

該角色就是幹活的角色, 命令傳遞到這裡是應該被執行的。比如這裡的檔案操作類(filekit)、展示類(displaykit)、網路類(netkit)

● command命令角色

需要執行的所有命令都在這裡宣告。比如這裡的

deletecommand。

● invoker呼叫者角色

要求命令物件執行請求,通常會持有命令物件,可以持有很多的命令物件。這個是客戶端真正觸發命令並要求命令執行相應操作的地方,也就是說相當於使用命令物件的入口。

1.命令模式的本質是對命令進行封裝,將發出命令的責任和執行命令的責任分割開

2.每乙個命令都是乙個操作:請求的一方發出請求,要求執行乙個操作;接收的一方收到請求,並執行操作。

3.命令模式允許請求的一方和接收的一方獨立開來,使得請求的一方不必知道接收請求的一方的介面,更不必知道請求是怎麼被接收,以及操作是否被執行、何時被執行,以及是怎麼被執行的。

4.命令模式使請求本身成為乙個物件,這個物件和其他物件一樣可以被儲存和傳遞。

5.命令模式的關鍵在於引入了抽象命令介面,且傳送者針對抽象命令介面程式設計,只有實現了抽象命令介面的具體命令才能與接收者相關聯。

1.降低物件之間的耦合度。

2.新的命令可以很容易地加入到系統中。

3.可以比較容易地設計乙個組合命令。

4.呼叫同一方法實現不同的功能

使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每乙個命令都需要設計乙個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。

命令模式的receiver在實際應用中一般都會被封裝掉

, 那是因為在專案中: 約定的優先順序最高, 每乙個命令是對乙個或多個

receiver的封裝, 我們可以在專案中通過有意義的類名或命令名處理命令角色和接收者角色

的耦合關係(這就是約定) , 減少高層模組(client類) 對低層模組(receiver角色類) 的依

賴關係, 提高系統整體的穩定性。 因此, 建議大家在實際的專案開發時採用封閉receiver的方法

, 減少client對reciver的依賴 。

修改後的command類:

public

abstract

class

command

//每個命令類都必須有乙個執行命令的方法

public

abstract

void

execute();

}

修改後的命令

public

class concretecommand1 extends command

//設定新的接收者

public

concretecommand1(receiver _receiver)

//每個具體的命令都必須實現乙個命令

public

void

execute()

}

說明一下:如果抽象類沒有宣告預設構造器的話,那麼他的子類一定不能存在預設構造器。

設計模式學習筆記 中介者模式

中介者模式 用來降低多個物件和類之間的通訊複雜性。這種模式提供了乙個中介類,該類通常處理不同類之間的通訊,並支援松耦合,使 易於維護。中介者模式屬於行為型模式。菜鳥 從工廠模式開始我們工廠就一直在造車,今天終於,終於有人要買我們的車了!於是我們公司就開了和其他公司談起來了。首先定義乙個說話動作的抽象...

設計模式學習筆記 中介者模式

中介者模式 用來降低多個物件和類之間的通訊複雜性。這種模式提供了乙個中介類,該類通常處理不同類之間的通訊,並支援松耦合,使 易於維護。中介者模式屬於行為型模式。菜鳥 1.1 交談動作及物件 1.2 中介者長這模樣 1.3 測試 1.4 結果 參考 從工廠模式開始我們工廠就一直在造車,今天終於,終於有...

設計模式學習筆記 建造者模式

1.概述 將乙個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。2.建造者模式中的角色 2.1 建造者 builder 為建立乙個產品物件的各個部件指定抽象介面。2.2 具體建造者 concretebuilder 實現builder的介面以構造和裝配...