zoukankan      html  css  js  c++  java
  • 设计模式之命令模式

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

    命令模式类图


    命令模式五个角色

    客户端(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();
    	}
    
    }
    




  • 相关阅读:
    汇编指令速查
    七种寻址方式(直接寻址方式)
    七种寻址方式(立即寻址、寄存器寻址)
    七种寻址方式(寄存器间接寻址方式)
    Indy IdHttp get Gb2312乱码的解决
    七种寻址方式(相对基址加变址寻址方式)
    七种寻址方式(寄存器相对寻址方式)
    【Note】2012.10.3
    算法04不重复打印排序数组中相加和为给定值的所有三元组
    算法03不重复打印排序数组中相加和为给定值的所有二元组
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3031611.html
Copyright © 2011-2022 走看看