假设您有如下命令:
public class PublishLastFiveCommand implements Command {
private Producer p;
public PublishLastFiveCommand(Producer p) {
this.p = p;
}
public void execute() {\
p.publishLastFive();
}
}
另外,制作人允许你
public void publishLastFive() {
System.out.println("publishing last 5");
}
Command c;
public void setCommand(Command c) {
this.c = c;
}
public void execute() {
c.execute();
}
问题:
预期用途是:
Command publish5 = new PublishLastFiveCommand(p);
p.setCommand(publish5);
p.execute();
我是否有一种优雅的方式来防范:
p.publishLastFive()
直接打电话?
答案 0 :(得分:1)
如果使publishLastFive()
方法受到保护,则只有同一包中的对象才能访问该方法。 (假设您的PublishLastFiveCommand类在同一个包中,它可以毫无问题地调用该方法,但其他包中的客户端代码不能直接调用publishLastFive()
。
我不明白你对阻止new PublishLastFiveCommand(p).execute();
的意思。你为什么要阻止这个?
答案 1 :(得分:0)
AFAIK完全没有,因为execute()是公开的。
答案 2 :(得分:0)
好的伙计们,我明白了。
发布以防万一,其他人也可能有同样的问题。
按命令:
@Override
public void execute() {
p.setCommand(this); <-- add this line
p.publishLastFive();
}
关于制片人
public void publishLastFive() {
if (c != null) { <--- add null check
System.out.println("publishing last 5");
}
}
Command c = null;
public void setCommand(Command c) {
this.c = c;
}
public void execute() {
c.execute();
c = null; <-- once done executing, set command to null
}
广告结果:
工作的:
publish5.execute();
工作的:
p.setCommand(publish5);
p.execute();
根据需要不起作用
p.publishLastFive();