[设计模式] 15.Command 命令模式
生活随笔
收集整理的這篇文章主要介紹了
[设计模式] 15.Command 命令模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我的理解:
命令池(采用堆或棧皆可)維護(hù)著一組命令集合。
只要這些命令實(shí)現(xiàn)同個(gè)命令接口或者命令抽象類,就能夠被命令池依次執(zhí)行。
class?App
{
????static?void?Main()
????{
????????//命令模式:將無論哪個(gè)實(shí)例的方法抽象成對(duì)應(yīng)的命令放入命令池。命令池會(huì)自動(dòng)執(zhí)行。
????????Printer?printer?=?new?Printer();
????????Scanner?scanner?=?new?Scanner();
????????PrintCommand?pc?=?new?PrintCommand(printer);
????????ScanCommand?sc?=?new?ScanCommand(scanner);
????????CommandQueue.Instance.Enquee(pc);
????????CommandQueue.Instance.Enquee(sc);
????}
}
//ICommand命令池,計(jì)時(shí)器每過一段時(shí)間取出一個(gè)命令執(zhí)行
public?class?CommandQueue?:?Queue<ICommand>
{
????單例#region?單例
????private?static?class?CommandQueueInstance
????{
????????public?static?readonly?CommandQueue?Instance?=?new?CommandQueue();
????}
????public?static?CommandQueue?Instance
????{
????????get
????????{
????????????return?CommandQueueInstance.Instance;
????????}
????}
????#endregion
????
????private?Timer?_t;
????private?CommandQueu()
????{
????????_t?=?new?Timer(new?TimerCallback(Execute),?null,?5000,?200);
????}
????private?void?Execute(object?obj)
????{
????????if?(this.Count?>?0)
????????{
????????????ICommand?cmd?=?this.Dequeue();
????????????cmd.Execute();
????????}
????}
}
//所有命令的抽象,這里使用接口比較好
public?interface?ICommand
{
????void?Execute();
}
//打印機(jī)打印的命令
public?class?PrintCommand?:?ICommand
{
????private?Printer?_printer;
????public?PrintCommand(?Printer?printer)
????{
????????_printer?=?printer;
????}
????public?virtual?void?Execute()
????{
????????_printer.Print();
????}
}
//掃描儀掃描的命令
public?class?ScanCommand?:?ICommand
{
????private?Scanner?_scanner;
????public?ScanCommand(Scanner?scanner)
????{
????????_scanner?=?scanner;
????}
????public?virtual?void?Execute()
????{
????????_scanner.Scan();
????}
}
//打印機(jī)提供打印方法
public?class?Printer
{
????public?void?Print()
????{
????????Console.WriteLine("Print.");
????}
}
//掃描儀提供掃描方法
public?class?Scanner
{
????public?void?Scan()
????{
????????Console.WriteLine("Scan.");
????}
}
命令池(采用堆或棧皆可)維護(hù)著一組命令集合。
只要這些命令實(shí)現(xiàn)同個(gè)命令接口或者命令抽象類,就能夠被命令池依次執(zhí)行。
class?App
{
????static?void?Main()
????{
????????//命令模式:將無論哪個(gè)實(shí)例的方法抽象成對(duì)應(yīng)的命令放入命令池。命令池會(huì)自動(dòng)執(zhí)行。
????????Printer?printer?=?new?Printer();
????????Scanner?scanner?=?new?Scanner();
????????PrintCommand?pc?=?new?PrintCommand(printer);
????????ScanCommand?sc?=?new?ScanCommand(scanner);
????????CommandQueue.Instance.Enquee(pc);
????????CommandQueue.Instance.Enquee(sc);
????}
}
//ICommand命令池,計(jì)時(shí)器每過一段時(shí)間取出一個(gè)命令執(zhí)行
public?class?CommandQueue?:?Queue<ICommand>
{
????單例#region?單例
????private?static?class?CommandQueueInstance
????{
????????public?static?readonly?CommandQueue?Instance?=?new?CommandQueue();
????}
????public?static?CommandQueue?Instance
????{
????????get
????????{
????????????return?CommandQueueInstance.Instance;
????????}
????}
????#endregion
????
????private?Timer?_t;
????private?CommandQueu()
????{
????????_t?=?new?Timer(new?TimerCallback(Execute),?null,?5000,?200);
????}
????private?void?Execute(object?obj)
????{
????????if?(this.Count?>?0)
????????{
????????????ICommand?cmd?=?this.Dequeue();
????????????cmd.Execute();
????????}
????}
}
//所有命令的抽象,這里使用接口比較好
public?interface?ICommand
{
????void?Execute();
}
//打印機(jī)打印的命令
public?class?PrintCommand?:?ICommand
{
????private?Printer?_printer;
????public?PrintCommand(?Printer?printer)
????{
????????_printer?=?printer;
????}
????public?virtual?void?Execute()
????{
????????_printer.Print();
????}
}
//掃描儀掃描的命令
public?class?ScanCommand?:?ICommand
{
????private?Scanner?_scanner;
????public?ScanCommand(Scanner?scanner)
????{
????????_scanner?=?scanner;
????}
????public?virtual?void?Execute()
????{
????????_scanner.Scan();
????}
}
//打印機(jī)提供打印方法
public?class?Printer
{
????public?void?Print()
????{
????????Console.WriteLine("Print.");
????}
}
//掃描儀提供掃描方法
public?class?Scanner
{
????public?void?Scan()
????{
????????Console.WriteLine("Scan.");
????}
}
轉(zhuǎn)載于:https://www.cnblogs.com/yurichou/archive/2007/08/13/854151.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的[设计模式] 15.Command 命令模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日期相加函数
- 下一篇: 一步一步掌握设计模式一(最简单的开始--