命令(Command)
概念
命令模式是一種行為型模式,目的是將處理指令物件化,並用命令池做為緩衝,可以做到命令排程處理的架構。使用者下指令時不會立即執行,而是會把命令暫存到命令池內,由執行者來決定何時執行命令。
範例
//**************
//* author: cian
//* 20231105
//**************
/* Command */
abstract class Command
{
protected abstract bool Action();
}
class Command1 : Command
{
protected override bool Action()
{
Console.WriteLine("Do Command 1.");
return true; //if success.
}
}
class Command2 : Command
{
protected override bool Action()
{
Console.WriteLine("Do Command 2.");
return true; //if success.
}
}
class Command3 : Command
{
protected override bool Action()
{
Console.WriteLine("Do Command 3.");
return true; //if success.
}
}
class CommandPool
{
private readonly Queue<Command> pool = new Queue<Command>();
public void SetCommand(Command cmd)
{
pool.Enqueue(cmd);
}
public void Excute()
{
Command cmd = pool.Dequeue();
if(!cmd.Action()) //if excute failed. use try...catch better.
{
pool.Enqueue(cmd); //cmd push back.
}
}
}
class MainApp
{
static void Main(string[] args)
{
CommandPool commandBuffer = CommandPool();
commandBuffer.SetCommand(new Command1);
commandBuffer.SetCommand(new Command2);
commandBuffer.SetCommand(new Command3);
commandBuffer.Excute();
commandBuffer.Excute();
commandBuffer.Excute();
}
}
結語
常見的狀況是指令的執行時間很久,需要依序執行否則會影響系統運作;或是不須立即處理的作業,可以累計到一定數量後再一次執行的批次作業。
近期遇到請求變多,原本定時批次存檔會造成系統崩潰的問題,後來改成不定時定量的批次存檔,藉此來降低系統負載,所以如何應用需取決於系統架構及資源分配。
以上為學習過程的問題紀錄
如果文章有誤,歡迎前輩留言請不吝指教。
發佈留言