java命令模式

來源:互聯網
上載者:User

標籤:設計模式

命令模式(Command Pattern):將一個請求封裝為一個對象,從而使我們可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。命令模式是一種對象行為型模式,其別名為動作(Action)模式或事務(Transaction)模式。

命令模式包含如下角色:

  • Command: 抽象命令類
  • ConcreteCommand: 具體命令類
  • Invoker: 調用者
  • Receiver: 接收者
  • Client:客戶類


代碼

import java.util.List;import java.util.ArrayList;/* The Command interface */public interface Command {   void execute();}/* The Invoker class */public class Switch {   private List<Command> history = new ArrayList<Command>();   public Switch() {   }   public void storeAndExecute(Command cmd) {      this.history.add(cmd); // optional       cmd.execute();           }}/* The Receiver class */public class Light {   public Light() {   }   public void turnOn() {      System.out.println("The light is on");   }   public void turnOff() {      System.out.println("The light is off");   }}/* The Command for turning on the light - ConcreteCommand #1 */public class FlipUpCommand implements Command {   private Light theLight;   public FlipUpCommand(Light light) {      this.theLight = light;   }   public void execute(){      theLight.turnOn();   }}/* The Command for turning off the light - ConcreteCommand #2 */public class FlipDownCommand implements Command {   private Light theLight;   public FlipDownCommand(Light light) {      this.theLight = light;   }   public void execute() {      theLight.turnOff();   }}/* The test class or client */public class PressSwitch {   public static void main(String[] args){      Light lamp = new Light();      Command switchUp = new FlipUpCommand(lamp);      Command switchDown = new FlipDownCommand(lamp);      Switch mySwitch = new Switch();      try {         if ("ON".equalsIgnoreCase(args[0])) {            mySwitch.storeAndExecute(switchUp);         }         else if ("OFF".equalsIgnoreCase(args[0])) {            mySwitch.storeAndExecute(switchDown);         }         else {            System.out.println("Argument \"ON\" or \"OFF\" is required.");         }      } catch (Exception e) {         System.out.println("Arguments required.");      }   }}

命令模式的優點

  • 降低系統的耦合度。
  • 新的命令可以很容易地加入到系統中。
  • 可以比較容易地設計一個命令隊列和宏命令(組合命令)。
  • 可以方便地實現對請求的Undo和Redo。

命令模式的缺點

  • 使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每一個命令都需要設計一個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。







著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

java命令模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.