設計模式——命令模式(Command)

命令模式的思想是將命令、命令接受者、命令發起者實現分離,從而到達低耦合的目的。

1、模式中的角色

Command接口:主要是爲所有命令類提供統一接口

ConcreteCommand類:實現Command接口的具體的命令類

Receiver類:命令的接收者

Invoker類:命令的發起者


2、角色關係圖


3、實例

描述:用命令模式來模擬開、關燈命令

a.Command接口

public interface Command {
	public abstract void execute();
}


b.ConcreteCommand類

public class LightOffCommand implements Command {  //關燈命令

	Light light;
	public LightOffCommand(Light light){
		this.light=light;
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		light.off();
	}

}
public class LightOnCommand implements Command {  //開燈命令

	Light light;
	
	public LightOnCommand(Light light){
		this.light=light;
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		light.on();

	}

}

另外對於多條命令代碼如下:

public class MacroCommand implements Command {

	Command[] commands;
	public MacroCommand(Command[] commands) {
		this.commands=commands;
	}

	@Override
	public void execute() {
		// TODO Auto-generated method stub
		for(int i=0;i<commands.length;i++){
			commands[i].execute();
		}

	}

}

c.Receiver類

public class Light {
	public void on(){
		System.out.print("light is on!");
	}
	public void off(){
		System.out.print("light is off!");
	}

}
d.Invoker類

public class Invoker {
	Command command;

	public Invoker() {
		// TODO Auto-generated constructor stub
	}
	
	public void setCommand(Command command){
		this.command=command;
	}
	
	public void executeCommand(){
		command.execute();
	}

}

測試代碼:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Invoker invoker = new Invoker();
		Light light=new Light();
		Command command=new LightOnCommand(light);
		//Command command=new LightOffCommand(light);
		invoker.setCommand(command);
		invoker.executeCommand();

	}


後記:

積跬步  至千里




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章