設計模式----命令模式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

相關文章
相關標籤/搜索