• 设计模式------命令模式


    命令模式定义

    将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和回复的功能。

    Receive接收者角色

    该角色就是干活的角色,命令传递到这里是应该被执行的。

    public abstract class Receiver{
        //抽象接收者,定义每个接收者都必须完成的业务
        public abstract void doSomething();
    }

    Command命令角色

    需要执行的所有命令都在这里声明。

    public abstract class Command{
        //每个命令都必须有一个执行命令的方法
        public abstract void execute();
    }

    具体的Command类

    public class ConcreteCommand1 extends Command{
        //对哪个Receiver类进行命令处理
        private Receiver receiver;
    
        //构造函数传递接收者
        public ConcreteCommand1(Receiver receiver){
            this.receiver = receiver;
        }
    
        //必须实现一个命令
        public void execute(){
            //业务处理
            this.receiver.doSomething();
        }
    }

    Invoker调用者角色

    接收到命令,并执行命令。

    public class Invoker{
        private Command command;
        
        //接收命令
        public void setCommand(Command command){
            this.command = command;
        }
    
        //执行命令
        public void action(){
            this.command.execute();
        }
    }

    命令模式的优点:

    类间的解耦,可扩展性

    缺点:

    命令很多时,Command的子类变多,类变得复杂。

    命令模式扩充

    public abstract class Command{
        //定义一个子类的全局共享变量
        protected final Receiver receiver;
    
        //实现类必须定义一个接收者
        public Command(Receiver receiver){
            this.receiver = receiver;
        }
    
        //每个命令类都必须有一个执行命令的方法
        public abstract void execute();
    }
    public class ConcreteCommand1 extends Command{
        //声明自己默认接收者
        public ConcreteCommand1(){
            super(new ConcreteCommand1());
        }
    
        //设置新的接收者
        public ConcreteCommand1(Receiver receiver){
            super(receiver);
        }
    
        //每个具体的命令都必须实现一个命令
        public void execute(){
            //业务处理
            super.receiver.doSomething();
        }
    }

    每个命令完成单一的职责,而不是根据接收者的不同完成不同的职责。在高层模块的调用时就不用考虑接收者是谁的问题。

  • 相关阅读:
    算法--将Excel列索引转换成默认标识
    Java参考资料-中文API
    java编程规范
    POI-根据Cell获取对应的String类型值
    将Excel中读取的科学计数法表示的Double数据转换为对应的字符串
    Android进程间通信之LocalSocket通信
    Android进程间通信之socket通信
    android用讯飞实现TTS语音合成 实现中文版
    Android Junit测试框架
    java interface的两个经典用法
  • 原文地址:https://www.cnblogs.com/maple92/p/7376090.html
Copyright © 2020-2023  润新知