設計模式二十一之命令模式

2021-10-04 05:52:12 字數 2033 閱讀 4380

2. 模式的結構與實現

在軟體開發系統中,常常出現「方法的請求者」與「方法的實現者」之間存在緊密的耦合關係。這不利於軟體功能的擴充套件與維護。例如,想對行為進行「撤銷、重做、記錄」等處理都很不方便,因此「如何將方法的請求者與方法的實現者解耦?」變得很重要,命令模式能很好地解決這個問題。

在現實生活中,這樣的例子也很多,例如,電視機遙控器(命令傳送者)通過按鈕(具體命令)來遙控電視機(命令接收者),還有計算機鍵盤上的「功能鍵」等。

命令模式(command):將乙個請求封裝成乙個物件,使發出請求的責任與執行請求的責任分開,這樣兩者通過命令物件進行溝通,這樣方便將命令進行儲存、傳遞、呼叫、增加和管理。

命令模式的優點有:

1. 降低系統的耦合度,呼叫操作的物件和實現操作的物件進行解耦;

2. 增加和刪除命令比較方便,不會影響到其他類,滿足開閉原則,擴充套件行好。

命令模式的缺點有:

1. 容易產生大量的命令類,增加了系統的複雜度。

1. 請求呼叫者和請求接收者需要解耦,使得呼叫者和接收者不進行直接互動;

2. 需要抽象出等待執行的行為。

命令模式的主要角色如下:

1. 抽象命令類角色(command):宣告執行命令的介面,擁有執行命令的方法 execute();

2. 具體命令類角色(concrete command):是抽象命令類的實現類,擁有接收者物件,並通過呼叫接收者的功能來完成命令要執行的操作;

3. 實現者/接收者角色(receiver):執行命令的相關操作,是具體命令物件業務的真正實現者;

4. 呼叫者/請求者角色(invoker):是請求的傳送者,通常擁有很多的命令物件,並通過訪問命令物件來執行相關操作,它不直接訪問接收者。。

抽象命令類

/**

* 抽象命令類

*/public

inte***ce

commond

具體命令類

/**

* 具體命令類

*/public

class

courseopencommand

implements

commond

@override

public

void

execute()

}/**

* 具體命令類

*/public

class

courseclosecommand

implements

commond

@override

public

void

execute()

}

實現者

/**

* 實現者

*/public

class

coursevideo

public

void

opencourse()

public

void

closecourse()

}

呼叫者

/**

* 呼叫者

*/public

class

staff

public

void

executecommand()

}

客戶端

public

class

client

}# 執行結果如下:

設計模式之命令模式課程已開放

設計模式之命令模式課程已關閉

設計模式(二十一) 狀態模式

狀態模式也是一種行為型模式,當我們的程式中需要一些狀態轉換,對於不同的狀態需要不同的行為時,我們就可以考慮使用狀態模式。下面用交通燈來當例子。我們需要紅黃綠三種顏色的狀態。inte ce state class redstate implements state class yellowstate ...

設計模式(二十一) 狀態模式

狀態模式也是一種行為型模式,當我們的程式中需要一些狀態轉換,對於不同的狀態需要不同的行為時,我們就可以考慮使用狀態模式。下面用交通燈來當例子。我們需要紅黃綠三種顏色的狀態。inte ce state class redstate implements state class yellowstate ...

python設計模式(二十一) 狀態模式

狀態模式,當物件的內部狀態改變的時候,允許物件執行不同的流程,看起來就像改寫了乙個物件,核心的方法是把複雜狀態變化情況下的流程抽象出來,簡化複雜情況狀態的判斷。我們設計乙個應用場景 當狀態是cpu使用率,在不同狀態下的自動化運維指令碼執行不同的操作 示例code class base def exe...