我遇到了问题,我想知道是否有适用的已知模式。我在考虑访客,但我不确定。问题如下:让我们说我有一个可以使用不同颜色的盒子队列。
public class Box{
public color;
public Box(String color){
this.color= color;
}
public print(boolean afterGreen){
System.out.print("\n color is "+color);
if (afterGreen)
System.out.print("and goes after a green box");
}
}
然后我有颜色队列
List<Box> queue = new ArrayList<Box>;
queue.add(new Box("red"));
queue.add(new Box("green"));
queue.add(new Box("blue"));
queue.add(new Box("green"));
queue.add(new Box("yellow"));
然后我要打印
boolean afterGreen = false;
for(Box box : queue){
box.print(afterGreen);
afterGreen = "green".equals(box.color);
}
如您所见,方法print()需要上下文信息。所以我在循环中计算它并将其作为参数传递给print()方法。
有没有更好的方法来做到这一点,所以我不必在循环中做到这一点?是否有解决此问题的设计模式?
答案 0 :(得分:0)
我会这样做:
class Box {
private String color;
public Box(String color) {
this.color = color;
}
public void printAfter(Box previousBox) {
System.out.print("\n color is " + color);
if (previousBox != null && previousBox.color.equals("green")) {
System.out.print("and goes after a green box");
}
}
}
Box previousBox;
for(Box box : queue){
box.printAfter(previousBox);
previousBox = box;
}
关于绿色后打印的决定包含在Box对象中。
答案 1 :(得分:0)
你会考虑实现类似的东西。
boolean wasGreen = false;
for(Box box : queue) {
box.print();
if(wasGreen) {
System.out.print("and goes after a green box");
}
wasGreen = "green".equals(box.color);
}