设计模式----命令模式UML和实现代码

1、什么是命令模式?

命令模式(Command)  将一个请求封装为一个对象,从而使你可用不一样的请求对客户进行参数 化;对请求排队和日志,以及支持可撤销的操做。java

类型:形为型模式 git

顺口溜:中访备迭 观模状职解github


2、命令模式UML


3、JAVA代码实现

package com.amosli.dp.behavior.command;

public abstract class Command {
	protected Receiver invoker;

	public Command(Receiver invoker) {
		this.invoker = invoker;
	}

	public abstract void execute();
}

package com.amosli.dp.behavior.command;

public class ConcreteCommand extends Command {

	public ConcreteCommand(Receiver invoker) {
		super(invoker);
	}

	@Override
	public void execute() {
		invoker.action();
	}

}

package com.amosli.dp.behavior.command;

import java.util.ArrayList;
import java.util.List;

public class Invoker {
	
	private List<Command> commands = new ArrayList<Command>();
	
	public void add(Command command){
		commands.add(command);
	}
	
	public void remove(Command command){
		commands.remove(command);
	}
	
	public void inform(){
		for (Command command : commands) {
			command.execute();
		}
	}
	
}

package com.amosli.dp.behavior.command;

public  class Receiver {
	public void action(){
		System.out.println("执行了这个操做。");
	}
}

4、使用场景

1.系统须要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。

2.系统须要在不一样的时间指定请求、将请求排队和执行请求。

3.系统须要支持命令的撤销(Undo)操做和恢复(Redo)操做。

4.系统须要将一组操做组合在一块儿,即支持宏命令。

5、优缺点

一、优势

1).下降对象之间的耦合度。ide

2).新的命令能够很容易地加入到系统中。this

3).能够比较容易地设计一个组合命令。spa

4).调用同一方法实现不一样的功能设计

二、缺点

使用命令模式可能会致使某些系统有过多的具体命令类。由于针对每个命令都须要设计一个具体命令类,所以某些系统可能须要大量具体命令类,这将影响命令模式的使用。日志

6、源码地址

本系列文章源码地址,https://github.com/amosli/dp  欢迎Fork  & Star !!code

相关文章
相关标签/搜索