• 设计模式之命令模式


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

    命令模式类图


    命令模式五个角色

    客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。

    命令(Command)角色:声明了一个给所有具体命令类的抽象接口。

    具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。

    请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。

    接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

    下面实现遥控器控制电灯的开关

    //命令角色

    package com.wdf.command;
    /*
     * 命令接口
     * */
    public interface Command {
    	public void execute();
    }


    //接收者

    package com.wdf.command;
    
    public class Light {
    	public Light() {}
    	public void on(){System.out.println("Light is on");}
    	public void off(){System.out.println("Light is off");}
    }



    具体命令角色

    package com.wdf.command;
    
    public class LightOnCommand implements Command{
    	Light light;
    	public LightOnCommand(Light light) {
    		this.light=light;
    	}
    	@Override
    	public void execute() {
    		light.on();
    	}
    }

    //请求者角色

    package com.wdf.command;
    
    public class SimpleRemoteControl {
    	Command command;
    	public SimpleRemoteControl(){}
    	public void setCommand(Command command){
    		this.command=command;
    	}
    	public void buttonWasPressed(){
    		command.execute();
    	}
    }

    客户端角色

    package com.wdf.command;
    
    public class Test {
    
    	public static void main(String[] args) {
    		SimpleRemoteControl control=new SimpleRemoteControl();//创建一个调用者,可以用来发送请求
    		Light light=new Light();//创建一个电灯对象,也就是请求的接受者
    		LightOnCommand lightOnCommand=new LightOnCommand(light);//创建一个命令,然后将接受者传给它
    		
    		control.setCommand(lightOnCommand);
    		control.buttonWasPressed();
    	}
    
    }
    




  • 相关阅读:
    JAVA网络编程入门
    悲观锁和乐观锁
    原子性---Atomic
    volatile关键字
    leetcode_111. 二叉树的最小深度
    leetcode_110. 平衡二叉树
    leetcode_108. 将有序数组转换为二叉搜索树
    leetcode_107. 二叉树的层次遍历 II
    leetcode_104. 二叉树的最大深度
    leetcode_101. 对称二叉树
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3031611.html
Copyright © 2020-2023  润新知