命令模式的思想是將命令、命令接受者、命令發起者實現分離,從而到達低耦合的目的。
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();
}
後記:
積跬步 至千里