zoukankan      html  css  js  c++  java
  • java设计模式--行为型模式--命令模式

     1                                                 命令模式
     2  概述
     3     将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
     4  
     5  
     6  适用性
     7     1.抽象出待执行的动作以参数化某对象。
     8 
     9     2.在不同的时刻指定、排列和执行请求。
    10 
    11     3.支持取消操作。
    12 
    13     4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。
    14 
    15     5.用构建在原语操作上的高层操作构造一个系统。
    16  
    17  
    18  参与者
    19     1.Command
    20       声明执行操作的接口。
    21 
    22     2.ConcreteCommand
    23       将一个接收者对象绑定于一个动作。
    24       调用接收者相应的操作,以实现Execute。
    25 
    26     3.Client
    27       创建一个具体命令对象并设定它的接收者。
    28 
    29     4.Invoker
    30       要求该命令执行这个请求。
    31 
    32     5.Receiver
    33       知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
     1 public class Test {
     2 
     3     public static void main(String[] args) {
     4         Receiver rec = new Receiver();
     5         Command cmd = new CommandImpl(rec);
     6         Invoker i = new Invoker();
     7         i.setCommand(cmd);
     8         i.execute();
     9     }
    10 }
    1 public class Receiver {
    2 
    3     public void receive() {
    4         System.out.println("This is Receive class!");
    5     } 
    6 }
    1 public abstract class Command {
    2     public Command(Receiver receiver) {
    3         this.receiver = receiver;
    4     } 
    5     
    6     protected Receiver receiver;
    7     
    8     public abstract void execute();
    9 }
     1 public class CommandImpl extends Command {
     2 
     3     public CommandImpl(Receiver receiver) {
     4         super(receiver);
     5     }
     6     
     7     public void execute() {
     8         receiver.receive();
     9     }
    10 }
     1 public class Invoker {
     2 
     3     private Command command;
     4     
     5     public void setCommand(Command command) {
     6         this.command = command;
     7     }
     8     
     9     public void execute() {
    10         command.execute();
    11     }
    12 }

    牛B的代码都在不断的重构,方便系统的扩展。今天又见识了...

  • 相关阅读:
    兼容python3 小烦
    fstring 和 海象赋值
    Go-gRPC的简单使用
    GO-操作etcd简单示例
    进度报告
    进度报告
    windown 10 安装redis
    在.Net Core中使用T4工具生成实体文件
    python-with关键字,json,pickie序列化与反序列化
    python-文件操作-读,写,追加
  • 原文地址:https://www.cnblogs.com/huzi007/p/3885243.html
Copyright © 2011-2022 走看看