美文网首页
命令模式

命令模式

作者: Davisxy | 来源:发表于2019-05-07 11:56 被阅读0次

    介绍

    • 命令模式:将一个请求封装成一个对象,从而使我们可以用不同的请求对客户端进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事物transaction模式。

    小栗子

    package com.principle.command;
    
    /**
     * 真正的执行者
     * @author xy
     *
     */
    public class Receiver {
        public void action(){
            System.out.println("Receiver.action()");
        }
    }
    
    package com.principle.command;
    
    public interface Command {
        /**
         * 这个方法是一个返回结果为空的方法
         * 实际项目中,可以根据需求设计做个不同的方法
         */
        void execute();
    }
    
    class ConcreteCommand implements Command{
        
        private Receiver receiver;
        
        public ConcreteCommand(Receiver receiver) {
            super();
            this.receiver = receiver;
        }
    
    
    
        @Override
        public void execute() {
            receiver.action();
        }
        
    }
    
    package com.principle.command;
    
    import java.util.List;
    
    
    /**
     * 调用者/发起者
     * @author xy
     *
     */
    public class Invoke {
        
        private List<Command> commands;
    
        public Invoke(List<Command> commands) {
            super();
            this.commands = commands;
        }
        
        //业务方法,用于调用命令类的方法
        public void call(){
            for (Command command : this.commands) {
                command.execute();
            }
        }
    
    }
    
    package com.principle.command;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class Client {
        public static void main(String[] args) {
            Command command1=new ConcreteCommand(new Receiver());
            Command command2=new ConcreteCommand(new Receiver());
            Command command3=new ConcreteCommand(new Receiver());
            List<Command> list=new ArrayList<Command>();
            list.add(command1);
            list.add(command2);
            list.add(command3);
            
            Invoke invoke=new Invoke(list);
            invoke.call();
        }
    }
    
    控制台输出:
    Receiver.action()
    Receiver.action()
    Receiver.action()
    

    类图

    命令者模式.png

    相关文章

      网友评论

          本文标题:命令模式

          本文链接:https://www.haomeiwen.com/subject/iwjpnqtx.html