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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

【转】设计模式学习笔记之命令模式

發布時間:2025/3/15 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】设计模式学习笔记之命令模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:將請求封裝成對象,以便使用不同的請求、隊列或者日志來參數化其他對象。命令模式支持可撤銷等操作。

命令模式將發出請求的對象和執行請求的對象解耦。在被解耦的兩者之間是通過命令對象進行溝通的。

案例代碼下載

案例情景:開燈和關燈操作是電燈的基本操作。我們用命令模式模擬這種情景。

Handler.java

[java] view plaincopyprint?
  • public class Handler {?
  • ??? public static final int LIGHT_OPEN = 0;?
  • ??? public static final int LIGHT_CLOSE= 1;?
  • ??? public void handleMessage(Message msg){?
  • ??????? int what = msg.what;?
  • ??????? Light l = (Light) msg.obj;?
  • ??????? switch(what){?
  • ??????? case LIGHT_OPEN :?
  • ??????????? l.lightOn();?
  • ??????????? break;?
  • ??????? case LIGHT_CLOSE:?
  • ??????????? l.lightOff();?
  • ??????????? break;?
  • ??????? }?
  • ??? }?
  • }?
  • public class Handler {public static final int LIGHT_OPEN = 0;public static final int LIGHT_CLOSE= 1;public void handleMessage(Message msg){int what = msg.what;Light l = (Light) msg.obj;switch(what){case LIGHT_OPEN :l.lightOn();break;case LIGHT_CLOSE:l.lightOff();break;}} } Message.java

    [java] view plaincopyprint?
  • public class Message {?
  • ??? int what;?
  • ??? int arg1;?
  • ??? int arg2;?
  • ??? Object obj;?
  • ??? Handler mHandler;?
  • ??? public Message(int what,Object obj){?
  • ??????? this.what = what;?
  • ??????? this.obj = obj;?
  • ??? }?
  • ??? public void setTarget(Handler handler){?
  • ??????? mHandler = handler;?
  • ??? }?
  • ??? public void sendMessage(){?
  • ??????? mHandler.handleMessage(this);?
  • ??? }?
  • }?
  • public class Message {int what;int arg1;int arg2;Object obj;Handler mHandler;public Message(int what,Object obj){this.what = what;this.obj = obj;}public void setTarget(Handler handler){mHandler = handler;}public void sendMessage(){mHandler.handleMessage(this);} } Light.java

    [java] view plaincopyprint?
  • public class Light {?
  • ??? public void lightOn(){?
  • ??????? System.out.println("開燈");?
  • ??? }?
  • ??? public void lightOff(){?
  • ??????? System.out.println("關燈");?
  • ??? }?
  • }?
  • public class Light {public void lightOn(){System.out.println("開燈");}public void lightOff(){System.out.println("關燈");} }
    Test.java

    [java] view plaincopyprint?
  • /**
  • * 命令模式使命令發送者與命令接收者完全解耦,他們互相不需要知道對方的邏輯實現。
  • * Message即是命令的包裝者,也是命令的發送者,其實真正的發送者是Handler
  • * 客戶端也就是命令的接收者,Light,怎么開燈,怎么關燈,我們不需要知道其內部邏輯,我們只需發出命令。
  • * @author
  • *
  • */?
  • public class Test {?
  • ??? public static void main(String args[]){?
  • ??????? Handler handler = new Handler();?
  • ??????? Light light = new Light();//命令接收者?
  • ?????????
  • ??????? Message lightOn = new Message(handler.LIGHT_OPEN, light);//包裝一條開燈的消息?
  • ??????? Message lightOff = new Message(handler.LIGHT_CLOSE, light);//包裝一條關燈的消息?
  • ?????????
  • ??????? lightOff.setTarget(handler);?
  • ??????? lightOn.setTarget(handler);?
  • ?????????
  • ??????? lightOn.sendMessage();//發出命令?
  • ??????? System.out.println("--------------------");?
  • ??????? lightOff.sendMessage();//發出命令?
  • ?
  • ??? }?
  • }?
  • /*** 命令模式使命令發送者與命令接收者完全解耦,他們互相不需要知道對方的邏輯實現。* Message即是命令的包裝者,也是命令的發送者,其實真正的發送者是Handler* 客戶端也就是命令的接收者,Light,怎么開燈,怎么關燈,我們不需要知道其內部邏輯,我們只需發出命令。* @author**/ public class Test {public static void main(String args[]){Handler handler = new Handler();Light light = new Light();//命令接收者Message lightOn = new Message(handler.LIGHT_OPEN, light);//包裝一條開燈的消息Message lightOff = new Message(handler.LIGHT_CLOSE, light);//包裝一條關燈的消息lightOff.setTarget(handler);lightOn.setTarget(handler);lightOn.sendMessage();//發出命令System.out.println("--------------------");lightOff.sendMessage();//發出命令} }
    測試結果:

    [java] view plaincopyprint?
  • 開燈?
  • --------------------?
  • 關燈?
  • 開燈 -------------------- 關燈
    總結:命令模式有很多變種,規整的命令模式會將命令委托給接收者,但我們也可以在命令包裝類中就實現命令處理邏輯。

    總結

    以上是生活随笔為你收集整理的【转】设计模式学习笔记之命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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