【问题标题】:Maintain different states for a static field in multiple objects为多个对象中的静态字段维护不同的状态
【发布时间】:2015-02-24 08:42:27
【问题描述】:

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

【问题讨论】:

    标签: java static-members


    【解决方案1】:

    Visual 根本不需要是静态的,例如您可以创建 Canvas 类,实例化一个画布,将此画布添加到一个或多个视觉对象,然后使用相同的视觉对象创建点。这样就可以用你的逻辑来解决了。

    但是我觉得你想要实现的和Swing的mvc模型一样,这个模式值得一看。

    【讨论】:

      【解决方案2】:

      您应该将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.
      }
      

      【讨论】:

        猜你喜欢
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多