您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關java設計模式中的命令模式有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
命令模式,將一個請求封裝為一個對象,從而使得可以用不同的請求進行參數化,對請求排隊或者記錄請求日志以及支持可撤銷的操作。
命令模式是對命令進行封裝,由調用者發起命令請求,接收者執行請求。
當我們調用時,執行的時序首先是調用者類,然后是命令類,最后是接收者類。也就是說一條命令的執行被分成了三步,它的耦合度要比把所有的操作都封裝到一個類中要低的多, 而這也正是命令模式的精髓所在:把命令的調用者與執行者分開,使雙方不必關心對方是如何操作的。
基本結構:
Execute
方法用來執行命令來看一個示例:
public class Receiver
{
public void Action()
{
Console.WriteLine("Action in receiver");
}
}
public abstract class Command
{
protected readonly Receiver Receiver;
protected Command(Receiver receiver) =>
Receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));
public abstract void Execute();
}
public class ConcreteCommand : Command
{
public ConcreteCommand(Receiver receiver) : base(receiver)
{
}
public override void Execute()
{
Receiver.Action();
}
}
public class Invoker
{
private Command _command;
public void SetCommand(Command command)
{
_command = command;
}
public void ExecuteCommand()
{
_command.Execute();
}
}
var receiver = new Receiver();
var command = new ConcreteCommand(receiver);
var invoker = new Invoker();
invoker.SetCommand(command);
invoker.ExecuteCommand();
// another sample
var barbecuer = new Barbecuer();
var waiter = new Waiter();
waiter.SetOrder(new BakeChickenWingCommand(barbecuer));
waiter.SetOrder(new BakeMuttonCommand(barbecuer));
waiter.SetOrder(new BakeMuttonCommand(barbecuer));
var willCancelOrder = new BakeMuttonCommand(barbecuer);
waiter.SetOrder(willCancelOrder);
waiter.CancelOrder(willCancelOrder);
waiter.Notify();
感謝各位的閱讀!關于“java設計模式中的命令模式有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。