Java: 如何避免 display() 和 write(pdf) 之间的代码重复
Java: How to avoid code duplication between display() and write(pdf)
我在 class
中有两个函数
void display()
和
void write(PGraphics pdf)
我使用 display()
将元素显示到屏幕上。有没有一种方法可以调用 display()
中的代码,这样我就不必在 write(pdf)
中再次写出每个函数?例如
line(0,0,100,100)
到 pdf.line(0,0,100,100)
等
如果您想使用所有代码,只需在内部调用它(但我猜您不想那样做)
您应该重构代码并将您想要在这两种方法中使用的内容放入它自己的方法中,例如:
private void hopefullyIGetABetterName(...) {...}
您可以在 display
和 write
中调用此方法
希望这对您有所帮助,否则请随时提问 :-)
您可以通过绘制到 PGraphics
图像而不是直接绘制到屏幕上来实现,然后将该图像绘制到屏幕上。这样您就可以将其换成 PDF PGraphics
而无需更改任何代码。像这样:
PGraphics pg;
PGraphics pdf;
boolean usePdf = false;
void setup() {
size(100, 100);
pg = createGraphics(width, height);
pdf = //whatever
}
void draw(){
if(usePdf){
display(pdf);
}
else{
display(pg);
image(pg, 0, 0);
}
}
void display(PGraphics g) {
g.beginDraw();
g.background(100);
g.stroke(255);
g.line(20, 20, mouseX, mouseY);
g.endDraw();
}
- 提取屏幕绘图和 PDF 绘图之间的通用接口(我们称之为
Drawable
)
- 实现
Drawable
以绘制到屏幕。
- 实现
Drawable
以绘制成 PDF
- 创建一个采用该接口的
draw
方法。
- 将
display()
改为调用draw(screenDrawable)
- 将
write(...)
改为调用draw(pdfDrawable)
我在 class
中有两个函数void display()
和
void write(PGraphics pdf)
我使用 display()
将元素显示到屏幕上。有没有一种方法可以调用 display()
中的代码,这样我就不必在 write(pdf)
中再次写出每个函数?例如
line(0,0,100,100)
到 pdf.line(0,0,100,100)
等
如果您想使用所有代码,只需在内部调用它(但我猜您不想那样做)
您应该重构代码并将您想要在这两种方法中使用的内容放入它自己的方法中,例如:
private void hopefullyIGetABetterName(...) {...}
您可以在 display
和 write
中调用此方法
希望这对您有所帮助,否则请随时提问 :-)
您可以通过绘制到 PGraphics
图像而不是直接绘制到屏幕上来实现,然后将该图像绘制到屏幕上。这样您就可以将其换成 PDF PGraphics
而无需更改任何代码。像这样:
PGraphics pg;
PGraphics pdf;
boolean usePdf = false;
void setup() {
size(100, 100);
pg = createGraphics(width, height);
pdf = //whatever
}
void draw(){
if(usePdf){
display(pdf);
}
else{
display(pg);
image(pg, 0, 0);
}
}
void display(PGraphics g) {
g.beginDraw();
g.background(100);
g.stroke(255);
g.line(20, 20, mouseX, mouseY);
g.endDraw();
}
- 提取屏幕绘图和 PDF 绘图之间的通用接口(我们称之为
Drawable
) - 实现
Drawable
以绘制到屏幕。 - 实现
Drawable
以绘制成 PDF - 创建一个采用该接口的
draw
方法。 - 将
display()
改为调用draw(screenDrawable)
- 将
write(...)
改为调用draw(pdfDrawable)