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

    命令模式(command pattern) 详细解释


    本文地址: http://blog.csdn.net/caroline_wendy


    命令模式: 将请求封装成对象, 以便使用不同的请求队列日志来參数化其它对象. 命令模式也支持可撤销操作.


    命令模式:

    调用者(Invoker);

    命令(Command): 可运行方法(execute), 详细命令(Concrete Command);

    接受者(Receiver): 调用命令(Set Command);


    详细方法:

    1. 详细对象.

    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public class Light {
    
    	public Light() {}
    	
    	public void on() {
    		System.out.println("Light is on");
    	}
    	
    	public void off() {
    		System.out.println("Light is off");
    	}
    	
    }
    
    
    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public class GarageDoor {
    	
    	public GarageDoor() {}
    
    	public void up() {
    		System.out.println("Garage Door is Open");
    	}
    
    	public void down() {
    		System.out.println("Garage Door is Closed");
    	}
    
    	public void stop() {
    		System.out.println("Garage Door is Stopped");
    	}
    
    	public void lightOn() {
    		System.out.println("Garage light is on");
    	}
    
    	public void lightOff() {
    		System.out.println("Garage light is off");
    	}
    }
    

    2. 命令接口(command interface), 包括运行方法execute().

    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public interface Command {
    	public void execute();
    }
    


    3. 详细命令(concrete command), 继承命令接口, 实现接口的方法.

    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public class LightOnCommand implements Command {
    
    	Light light;
    	
    	public LightOnCommand (Light light) {
    		this.light = light;
    	}
    	
    	/* (non-Javadoc)
    	 * @see command.Command#execute()
    	 */
    	@Override
    	public void execute() {
    		// TODO Auto-generated method stub
    		light.on();
    	}
    
    }
    
    
    
    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public class GarageDoorOpenCommand implements Command {
    	
    	GarageDoor garageDoor;
    	
    	public GarageDoorOpenCommand (GarageDoor garageDoor) {
    		this.garageDoor = garageDoor;
    	}
    	
    	/* (non-Javadoc)
    	 * @see command.Command#execute()
    	 */
    	@Override
    	public void execute() {
    		// TODO Auto-generated method stub
    		garageDoor.up();
    	}
    
    }

    4. 接受者(receiver), 通过传递的命令參数, 调用运行方法.

    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public class SimpleRemoteControl {
    	
    	Command slot;
    	
    	public SimpleRemoteControl() {}
    	
    	public void setCommand(Command command) {
    		this.slot = command;
    	}
    	
    	public void buttonWasPressed() {
    		slot.execute();
    	}
    }
    

    5. 測试, 创建接收者, 创建对象, 将对象传递至命令, 接受者调用命令, 运行.

    /**
     * @time 2014年6月9日
     */
    package command;
    
    /**
     * @author C.L.Wang
     *
     */
    public class RemoteControlTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		SimpleRemoteControl remote = new SimpleRemoteControl();
    		Light light = new Light();
    		GarageDoor garageDoor = new GarageDoor();
    		LightOnCommand lightOn = new LightOnCommand(light);
    		GarageDoorOpenCommand garageOpen = 
    				new GarageDoorOpenCommand(garageDoor);
    		
    		remote.setCommand(lightOn);
    		remote.buttonWasPressed();
    		remote.setCommand(garageOpen);
    		remote.buttonWasPressed();
    		
    	}
    
    }
    







  • 相关阅读:
    sql 生成随机数 以及不重复随机数
    值提供器 AND 模型绑定器
    web项目在iis配置好后不能正确访问问题集锦,以及IIS常规设置
    js
    性能优化
    MVC3;0问题与知识点
    EntityFramework
    MSSQL2008 临时总结文档2014
    py--使用__slots__
    py--使用@property
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7079782.html
Copyright © 2011-2022 走看看