命令模式简析

目的:将请求方与接收方完全解耦

UML类图:(图片来源:http://www.uml.org.cn/oobject/201404035.asp

                

角色: 

            1.客户端角色(Client)

            2.抽象命令角色(Command)

            3.具体命令角色(ConcreteCommand):内部有Receiver实例,懂!!!

            4.调用者角色(Invoker):命令请求者(发出者),内部有ConcreteCommand实例

            5.接收者角色(Receiver):命令接收者,执行相应操作。 

示例:模拟计算机启动过程,代码如下

package pers.liu.apattern.cpattern;
/**
 * @author Mr.Liu
 * @description: 接收者角色(接口):主板 
 */
public interface MainBoardApi {
	public void open();
}
package pers.liu.apattern.cpattern;
/**
 * @author Mr.Liu
 * @description: 接收者角色(具体):Giga的主板
 */
public class GigaMainBoard implements MainBoardApi {
	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println("GigaMainBoard is booting");
		System.out.println("GigaMainBoard start-up");
	}
}
package pers.liu.apattern.cpattern;
/**
 * @author Mr.Liu
 * @description: 抽象命令角色:发送的命令,此处可理解为电线,连接开机按钮和主板
 */
public interface Command {
	public void execute();
}
package pers.liu.apattern.cpattern;
/**
 * @author Mr.Liu
 * @description: 机箱,执行开机操作 
 */
public class Box {
	private Command command = null;
	
	public Box(Command command){
		this.command = command;
	}
	
	public void openButtonPressed(){
		command.execute();
	}
}
package pers.liu.apattern.cpattern;
/**
 * @author Mr.Liu
 * @description: 具体命令角色:此处可理解为电线,连接开机按钮和主板
 */
public interface Command {
	public void execute();
}
/**
* @Author: Mr.Liu
* @Date: 15:35 2018/6/7
* @Modified by: 
* @Description: 客户端角色
*/
public class Client {
    Public static void main(String[] args){
        MainBoardApi mainBoardApi = new GigaMainBoard();
        Command command = new OpenCommand(mainBoardApi);
        Box box = new Box(command);box.openButtonPressed();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36793010/article/details/80610932