我有一个Point类,它有一个静态类型变量Visual。我把它设为静态因为:Visual类型包含在点之间绘制点和线等的方法。每次Visual对象实例化时,Visual类型也会创建一个空白画布。由于我需要在一个画布上可视化一组点,因此Visual将成为静态单例。我的问题是我有一个客户端类PointOp,它使用Point对象执行一些操作。我想在单个画布上使用PointOp实例1中的所有Point对象,并在单个不同的画布上使用PointOp实例2中的所有Point对象。我无法通过简单地实例化两个PointOp对象来实现这一点。来自两个实例的所有Point对象都在同一画布上绘制。我怎么解决这个问题?有没有办法在不同的PointOp对象中维护不同版本的Visual对象?
public class Point
{
static Visual visualize = null;
public void draw() // draw() method of Point
{
if (visualize == null)
visualize = new Visual();
visualize.draw(); // draw() method of type Visual evoked.
}
}
public class PointOp()
{
Point[] point;
public PointOp()
{
// Instantiate an array of Point objects for operation.
}
PointOp instance1 = new PointOp();
instance1.point[0].draw();
PointOp instance2 = new PointOp();
instance2.point[0].draw(); // Problem: all Points mixed on single canvas.
}
答案 0 :(得分:0)
Visual根本不需要是静态的,例如,您可以创建Canvas类,实例化一个画布,将此画布添加到一个或多个可视对象,然后使用相同的可视对象创建点。这就是用你的逻辑解决它的方法。
但我认为你想要达到的目标与Swing的mvc模型相同,看看这个模式是值得的。
答案 1 :(得分:0)
您应该将Visual
存储在PointOp
类中,然后将其作为参数传递给draw()
方法:
public class Point
{
static Visual visualize = null;
public void draw(Visual visualize)
{
visualize.draw();
}
}
public class PointOp()
{
Point[] point;
private Visual visual;
public PointOp()
{
// Instantiate an array of Point objects for operation.
visual = new Visual()
}
PointOp instance1 = new PointOp();
instance1.point[0].draw(visual );
PointOp instance2 = new PointOp();
instance2.point[0].draw(visual ); // Problem: all Points mixed on single canvas.
}