保持多个对象中静态字段的不同状态

时间:2015-02-24 08:42:28

标签: java static-members

我有一个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.
}

2 个答案:

答案 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.
}
相关问题