Java 在命令设计模式中将上下文传递给execute方法
通过查看命令设计模式,我了解到我们需要通过构造函数设置上下文,然后调用execute方法在上下文上执行一些操作来创建命令。例如:Java 在命令设计模式中将上下文传递给execute方法,java,design-patterns,Java,Design Patterns,通过查看命令设计模式,我了解到我们需要通过构造函数设置上下文,然后调用execute方法在上下文上执行一些操作来创建命令。例如: public class Command implements ICommand { Device device; public Command(Device device) { this.device = device; } public void execute() { this.device.
public class Command implements ICommand {
Device device;
public Command(Device device) {
this.device = device;
}
public void execute() {
this.device.turnOn()
}
}
我想知道,使用这种方法,我们将需要为我们创建的每个设备对象创建一个新的命令对象。将上下文和一些参数传递给execute方法可以吗?我正在寻找类似于:
public class Command implements ICommand {
public void execute(Device device) {
this.device.turnOn();
}
}
这种方法有什么问题吗?命令模式背后的思想是,它应该封装执行操作所需的所有信息。这使您可以将操作的执行延迟到以后,甚至在操作执行后撤消操作
一个具体的例子,考虑字处理器中的“撤消”特性。
execute
方法接受设备
参数更有用,那么您应该这样做!如果你这样做,你应该考虑重命名该接口。当它不完全遵循命令模式时,将其称为命令模式可能会混淆代码的其他读者
当决定是否将一个对象作为一个方法参数或一个构造函数参数时,我觉得最有帮助的事情之一是考虑我将如何测试这个应用程序。构成测试初始设置一部分的对象作为构造函数参数传入,而构成测试输入或测试向量的对象是方法参数。我发现遵循该准则有助于生成可维护的代码