日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

『设计模式』再谈麦当劳的点单模式--命令模式(Command)

發(fā)布時間:2023/12/15 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『设计模式』再谈麦当劳的点单模式--命令模式(Command) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

23種設計模式+額外常用設計模式匯總 (持續(xù)更新)

麥當勞,我三期設計模式拿你舉例子了,私信聯(lián)系我打錢!!!

概述

  • 命令模式又稱為行動(Action) 模式或交易(Transaction) 模式。
  • 命令模式把一個請求或者操作封裝到一個對象中。命令模式允許系統(tǒng)使用不同的請求把客戶端參數化;對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。
  • 命令模式是對命令的封裝。命令模式把命令的責任和執(zhí)行命令的責任分割開,委派給不同的對象。

模式結構

示意性代碼

namespace 命令模式 {class Receiver{public void Action(){Console.WriteLine("操作成功!");}}abstract class Command{protected Receiver receiver;public Command(Receiver receiver){this.receiver = receiver;}abstract public void Execute();}class ConcreteCommand:Command{public ConcreteCommand(Receiver receiver) : base(receiver) { }public override void Execute(){receiver.Action();}}class Invoker{private Command command;public void SetCommand(Command command){this.command = command;}public void ExecuteCommand(){command.Execute();} }class Program{static void Main(string[] args){Receiver r = new Receiver();Command c = new ConcreteCommand(r);Invoker i = new Invoker();i.SetCommand(c);i.ExecuteCommand();Console.Read();}} }
  • 將請求的接收者(Receiver)放到Command的具體子類ConcreteCommand中,當請求到來時(Invoker發(fā)出Invoker消息激活Command對象),ConcreteCommand將處理請求交給Receiver對象進行處理
  • Command模式將調用操作的對象和知道如何實現該操作的對象解耦。在上面Command的結構圖中,Invoker對象根本就不知道具體的是哪個對象在處理Excute操作。
  • 在Command下要增加新的處理操作對象很容易,我們可以通過創(chuàng)建新的繼承自Command的子類來實現這一點。
  • Command模式可以和Memento模式結合起來,支持Undo的操作。

使用命令模式情況

  • 如果需要在不同的時刻指定、排列和執(zhí)行請求,可以選用命令模式,把這些請求封裝成為命令對象,然后實現把請求隊列化
  • 如果需要支持取消操作從可以選用命令模式,通過管理命令對象,,能很容易的實現命令的恢復和重做的功能
  • 如果需要支持當系統(tǒng)崩潰時,能把對系統(tǒng)的操作功能重新執(zhí)行一遍,可以選用命令模式,把這些操作功能的請求封裝成命令對象,然后實現日志命令,就可以在系統(tǒng)恢復回來后,通過日志獲取命令列表,從而重新執(zhí)行一遍功能
  • 在需要事務的系統(tǒng)中,可以選用命令模式,命令模式提供了對事務進行建模的方法,命令模式有二個別名就是Transaction.

優(yōu)點

命令允許請求的一方和接收請求的一方能夠獨立演化。

  • 命令模式使新的命令很容易地被加入到系統(tǒng)里
  • 允許接收請求的一方決定是否要否決(Veto) 請求。
  • 能較容易地設計一個命令隊列。
  • 可以容易地實現對請求的Undo和Redo。
  • 在需要的情況下,可以較容易地將命令記入日志。
  • 命令模式把請求一個 操作的對象與知道怎么執(zhí)行一個操作的對象分割開。
  • 命令類與其他任何別的類-樣,可以修改和推廣。

本質

封裝請求。

實例:

麥當勞點單:

炸雞漢堡很香,但請好好吃飯! ?


廚師 命令接收者

package Command_McDonald;public class Cook {public void Chicken(){System.out.println("做一份炸雞");}public void Hamburger(){System.out.println("做一份漢堡包");}public void fries() {System.out.println("做一份薯條");} }

命令抽象接口

package Command_McDonald;public abstract class Command {protected Cook cook_receiver;public Command(Cook cook_receiver) {this.cook_receiver = cook_receiver;}abstract public void Excute_Command(); }

炸雞命令,具體命令

package Command_McDonald;public class Chicken_Command extends Command {@Overridepublic void Excute_Command() {cook_receiver.Chicken();}public Chicken_Command(Cook cook_receiver) {super(cook_receiver);// TODO Auto-generated constructor stub}} package Command_McDonald;public class Fries_Command extends Command {@Overridepublic void Excute_Command() {cook_receiver.fries();}public Fries_Command(Cook cook_receiver) {super(cook_receiver);// TODO Auto-generated constructor stub}} package Command_McDonald;public class Hamburger_Command extends Command {@Overridepublic void Excute_Command() {cook_receiver.Hamburger();}public Hamburger_Command(Cook cook_receiver) {super(cook_receiver);// TODO Auto-generated constructor stub} }

收銀員,命令調用者

package Command_McDonald;import java.util.ArrayList; import java.util.List;public class Cashier {private List<Command> Command_Undo = new ArrayList<Command>();public void add_Command(Command com) {Command_Undo.add(com); //增加命令}public void Undo_Command(Command com) {Command_Undo.remove(com); //移除命令}public void Notify() // 提交菜單{for(Command con:Command_Undo){con.Excute_Command();//每樣告訴后廚進行制作}} }

總結

以上是生活随笔為你收集整理的『设计模式』再谈麦当劳的点单模式--命令模式(Command)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩亚洲欧美在线观看 | 亚洲综合色自拍一区 | 成年人免费看视频 | 亚洲av无码成人精品国产 | 光棍影院一区二区 | 精品成人一区二区三区久久精品 | 欧美一级免费片 | 性色av一区二区三区在线观看 | 日本精品一区二区视频 | 免费看裸体视频网站 | 欧美成人三级在线 | 秋霞av鲁丝片一区二区 | 中文字幕第31页 | 亚洲天堂久久久 | 日韩精品中文在线 | 在线观看香蕉视频 | 蜜桃91丨九色丨蝌蚪91桃色 | 久久中文字幕一区二区 | 人人澡人人澡 | 国产成人精品免费在线观看 | 女生的胸无遮挡 | 国产美女免费看 | 亚洲男人在线天堂 | 一区二区三区免费观看视频 | 奇米影视狠狠干 | 亚洲色图一区二区三区 | 国产美女网站 | 北岛玲av| 欧美性大战久久久久久久蜜桃 | 国产a不卡 | www.av视频在线观看 | 亚洲成人av一区二区三区 | 美女爽爽爽 | 偷拍女澡堂一区二区三区 | 四虎免费视频 | 久草成人在线视频 | www在线看片| 一级片黄色 | 亚洲区自拍 | 五月天校园春色 | 毛片毛片女人毛片毛片 | 久久久久久欧美 | 青青草免费在线视频 | 啪啪网页 | 婷婷色婷婷开心五月四房播播 | 精品欧美久久久 | 脱女学生小内内摸了高潮 | 亚色在线观看 | a级片国产| 国产免费黄色网址 | 欧美激情二区三区 | 一区二区天堂 | 亚洲琪琪 | 欧美无极品| 国产鲁鲁视频在线观看特色 | 草av在线 | 日本在线一区二区 | 日本欧美三级 | 在线免费看污片 | 中文字幕日产 | 香蕉国产在线视频 | 99爱爱视频 | 麻豆视频网页 | 黄色aaaaa| 欧美成人三级在线视频 | 国产精品欧美亚洲 | xzjzjzjzjzj欧美大片 | 亚洲精品二三区 | 色婷婷av一区二区三区大白胸 | 夜夜骑天天干 | 国产日韩av在线播放 | 久久九九99 | 成人网免费视频 | 香蕉精品视频在线观看 | 好吊色在线视频 | 色综合亚洲 | 深爱婷婷 | 亚洲AV午夜福利精品一级无码 | 国产精品100 | 91视频一区 | 亚洲天堂网址 | 少妇高潮一区二区三区喷水 | 国产九九九精品 | 国产一二三区免费视频 | 青娱乐欧美 | 动漫大乳美女 | 日日插日日操 | 日韩中文字幕网站 | 丝袜 亚洲 另类 欧美 重口 | 狠狠的日 | 免费99精品国产自在在线 | 午夜aaa| 色妺妺视频网 | 蜜桃在线一区 | 国产真实夫妇交换视频 | 精精国产xxxx视频在线播放 | 欧美成人片在线观看 | 丰满少妇被猛烈进入无码 | 天天躁日日躁狠狠躁av麻豆男男 |