熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java設計模式-----Command模式

2013-11-23 18:48:35  來源: Java核心技術 

  源自

  Command模式

  一 Command模式定義:
    將一個請求封裝為一個對象從而使你不同的請求對客戶進行參數化對請求排隊或記錄請求日志以及支持可撤銷的操作
    二 模式解說
    Commad模式是一種對象行為模式它可以對發送者(sender)和接收者(receiver)完全解耦(decoupling)發送者 是請求操作的對象接收者 是接收請求並執行某操作的對象有了 解耦發送者對接收者的接口一無所知)這裡請求(request)這個術語指的是要被執行的命令Command模式還讓我們可以對 何時 以及 如何 完成請求進行改變因此Command模式為我們提供了靈活性和可擴展性
    三怎麼使用?
    ) 定義一個Command接口接口中有一個統一的方法這就是將請求/命令封裝為對象
    ) 定義具體不同命令類ConcreteCommand實現Command接口
    ) 定義一個命令的調用角色Invoker
    ) 定義一個命令執行狀態的接收者Receiver(非必須)

  例子

  view plaincopy to clipboardprint?
    public class Document {

  public void display() {
            Systemoutprintln(顯示文檔內容);
        }

  public void undo() {
            Systemoutprintln(撤銷文檔內容);
        }

  public void redo() {
            Systemoutprintln(重做文檔內容);
        }
    }

  public interface DocumentCommand {
        public void execute();
    }

  public class DisplayCommand implements DocumentCommand {

  private Document document;

  public DisplayCommand(Document doc) {
            document = doc;
        }

  public void execute() {
            documentdisplay();
        }
    }

  public class RedoCommand implements DocumentCommand {

  private Document document;

  public RedoCommand(Document doc) {
            document = doc;
        }

  public void execute() {
            documentredo();
        }
    }

  public class UndoCommand implements DocumentCommand {

  private Document document;

  public UndoCommand(Document doc) {
            document = doc;
        }

  public void execute() {
            documentundo();
        }
    }

  public class DocumentInvoker {

  private DisplayCommand _dcmd;
        private UndoCommand _ucmd;
        private RedoCommand _rcmd;

  public DocumentInvoker(DisplayCommand dcmd UndoCommand ucmd
                RedoCommand rcmd) {
            this_dcmd = dcmd;
            this_ucmd = ucmd;
            this_rcmd = rcmd;
        }

  public void display() {
            _dcmdexecute();
        }

  public void undo() {
            _ucmdexecute();
        }

  public void redo() {
            _rcmdexecute();
        }
    }

  public class CommandTest {

  public static void main(String[] args) {

  Document doc = new Document();
            DisplayCommand display = new DisplayCommand(doc);
            UndoCommand undo = new UndoCommand(doc);
            RedoCommand redo = new RedoCommand(doc);
            DocumentInvoker invoker = new DocumentInvoker(display undo redo);
            invokerdisplay();
            invokerundo();
            invokerredo();
        }
    }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25766.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.