您现在的位置是:首页 >

java设计模式常用 Java设计模式-----Command模式

火烧 2023-02-03 06:10:35 1042
Java设计模式-----Comma d模式   源自  Comma d模式  一 Comma d模式定义: 将一个请求封装为一个对象 从而使你不同的请求对客户进行参数化 对请求排队或记录请求日志 以

Java设计模式-----Command模式  

  源自

java设计模式常用 Java设计模式-----Command模式

  Command模式

  一 Command模式定义:    将一个请求封装为一个对象 从而使你不同的请求对客户进行参数化 对请求排队或记录请求日志 以及支持可撤销的操作     二 模式解说    Commad模式是一种对象行为模式 它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling) ( 发送者 是请求操作的对象 接收者 是接收请求并执行某操作的对象 有了 解耦 发送者对接收者的接口一无所知 )这里 请求 (request)这个术语指的是要被执行的命令 Command模式还让我们可以对 何时 以及 如何 完成请求进行改变 因此 Command模式为我们提供了灵活性和可扩展性     三 怎么使用?    ) 定义一个Command接口 接口中有一个统一的方法 这就是将请求/命令封装为对象     ) 定义具体不同命令类ConcreteCommand实现Command接口     ) 定义一个命令的调用角色Invoker     ) 定义一个命令执行状态的接收者Receiver(非必须)

  例子

  view plaincopy to clipboardprint?    public class Document {

  public void display() {            System out println( 显示文档内容 );        }

  public void undo() {            System out println( 撤销文档内容 );        }

  public void redo() {            System out println( 重做文档内容 );        }    }

  public interface DocumentCommand {        public void execute();    }

  public class DisplayCommand implements DocumentCommand {

  private Document document;

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

  public void execute() {            document display();        }    }

  public class RedoCommand implements DocumentCommand {

  private Document document;

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

  public void execute() {            document redo();        }    }

  public class UndoCommand implements DocumentCommand {

  private Document document;

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

  public void execute() {            document undo();        }    }

  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() {            _dcmd execute();        }

  public void undo() {            _ucmd execute();        }

  public void redo() {            _rcmd execute();        }    }

  public class CommandTest {

  public static void main(String[] args) {

lishixinzhi/Article/program/Java/hx/201311/25766  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码