江明涛的博客
this 在命令模式中的使用
this 在命令模式中的使用

this 在命令模式中的使用

This 在命令模式中的使用

命令模式是一种行为型设计模式,用于将请求封装为一个对象,从而使不同的请求、队列或日志可以参数化其他对象。在命令模式中,this关键字可以有不同的用途。

首先,在命令模式中,this关键字可以用于指向调用命令的对象。当一个对象调用一个命令并将自身作为参数传递给命令对象时,命令对象可以使用this关键字来访问调用对象的属性和方法。

public class LightOnCommand implements Command {
    private Light light;
    
    public LightOnCommand(Light light) {
        this.light = light;
    }
    
    public void execute() {
        light.on();
    }
}

在上面的示例中,LightOnCommand接受一个Light对象作为构造函数的参数。当execute()方法被调用时,该方法内部的this.light.on()将会调用传入的Light对象的on()方法。

另外,this关键字还可以在命令模式中用于指向命令对象本身。当一个命令对象需要将自身作为参数传递给其他对象时,可以使用this关键字来引用自身。

public interface Command {
    void execute();
    void undo();
    void setReceiver(Receiver receiver);
}
public class MacroCommand implements Command {
    private List<Command> commands;
    
    public MacroCommand() {
        commands = new ArrayList<>();
    }
    
    public void execute() {
        for (Command command : commands) {
            command.execute();
        }
    }
    
    public void undo() {
        for (Command command : commands) {
            command.undo();
        }
    }
    
    public void addCommand(Command command) {
        commands.add(command);
    }
    
    public void removeCommand(Command command) {
        commands.remove(command);
    }
    
    public void setReceiver(Receiver receiver) {
        for (Command command : commands) {
            command.setReceiver(receiver);
        }
    }
}

在上面的示例中,MacroCommand实现了Command接口,并可以包含多个其他的命令对象。当execute()或undo()方法被调用时,该方法会遍历所有的命令对象,并分别调用它们的execute()或undo()方法。在setReceiver()方法中,可以看到this关键字被用于引用自身,并将自身传递给每个命令对象的setReceiver()方法。

综上所述,命令模式中的this关键字可以用于指向调用命令的对象,或者用于引用命令对象本身,并将自身作为参数传递给其他对象。这种使用方式使得命令模式具有更大的灵活性和扩展性。