我对 a 的以下设计有疑问Canvas
,其中某些domain
对象应该由不同的表示figures
:
我需要一个充当域对象的“封闭”类。它保存应该呈现给用户的数据,例如State
. 这个状态有一个名字,当然还有一个状态等作为变量。
这个状态应该用一个 直观地表示Rectangle
。因此我认为使用Composition Pattern
:
interface Drawable {
void draw();
}
class Rectangle implements Drawable {
@Override
void draw() {
//draw the state as a rectangle depending on the state variables, draw the name etc.
}
}
interface Figure {
Drawable getDrawable();
}
class State implements Figure {
boolean state;
Rectangle rectangle;
public Drawable getDrawable() { return rectangle; }
}
现在我可能还有其他对象,它们也实现Figure
并因此提供了Drawable
用于绘制它们的特定对象。
我的问题是:以下将为draw()
每个对象执行正确的方法,但是 draw 方法需要它的封闭类的所有信息。
List<Figure> list;
for (Figure obj : list) {
obj.getDrawable().draw();
}
该方法如何draw()
知道State
它的封闭对象的例如和名称变量State
,因为它应该基于它绘制它?
我唯一想到的是:
interface Drawable {
void draw(Figure figure);
}
for (Drawable obj : list) {
obj.getDrawable().draw(obj);
}
但是调用一个对象感觉不对,并且在同一个语句中提供这个对象作为参数!
怎样才能做得更好?