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...