在运行时访问对象!

时间:2010-12-12 13:00:26

标签: java design-patterns

我有一个java程序,允许在单击按钮时创建新图形,比如说每个按钮都是一个带有数字的圆圈。

我想要做的是,当我创建3个圆圈时,我创建的圆圈内的数字是1-3,但要做到这一点,我需要能够跟踪用户已经创建的圆形对象的数量

我考虑过使用InstanceOf,但这似乎是实现它的粗略方式

赞赏任何想法。 谢谢 克里斯

6 个答案:

答案 0 :(得分:2)

如果我理解正确,这更像是一个设计问题,而不是一个实现问题。设计对于各种应用程序非常重要,因为它们可以帮助您以更好的方式组织代码。在编写第一行代码之前,通常只需几个小时的思考就可以帮助您以后节省更多时间。我希望我的回答能回答你的问题。

尝试将其视为MVC应用程序,其中组件是视图层,模型将是存储实例数量(或对它们的引用)的bean,控制器将是由“事件”触发的代码“来自视图和模型层。

如上面的答案所述,您需要一个中心点来访问您的数据,因此您需要确保只有一个UI状态的bean表示。这可以使用你建议的单例模式,使用静态字段或使用服务提供者外观来访问对象来实现,其中任何一个都可以完成这项工作。当然,您需要选择最适合您项目的方法,而设计也是一件坏事;)

你可能想要为PureMVC框架做教程,它非常简单轻巧。我建议至少做一下教程并浏览文档,这样你才能理解这个想法。你不需要使用它,但它对教育目的有好处。

答案 1 :(得分:1)

另一种方法是将Circle对象保存在ArrayList中,这样你就可以通过.size()方法检查有多少个圆圈。另一个优点是您可以轻松更改/删除特定的圈子。

修改: 添加奖励,您想要在圆圈中表示的数字是圆圈的索引+ 1.

答案 2 :(得分:1)

我不知道你是如何设计你的系统的。但我所拥有的是一个中心位置,我的所有形状都存储在那里,可以添加/删除。然后,该商店还可以负责计算它创建/删除的对象以及它们的命名方式。

如果您不打算扩展程序/没有大的要求,我认为静态变量是一个简单的解决方案。

答案 3 :(得分:0)

如果我正确理解了你的问题,你所需要的只是一个全局(例如静态)变量,每次创建一个Circle对象时它就会增加,例如:来自构造函数。

答案 4 :(得分:0)

如果圈数只能增加(无法删除圆圈),那么您希望在Circle类中使用static variable来跟踪该类已实例化的次数。< / p>

即:

public class Circle
{
    private static int numCircles = 0;
    private int circleId;

    public Circle()
    {
        // Preincrement the number of circles and assign this circle its ID.
        circleId = ++numCircles;
    }
}

或者,如果您要添加和删除圈子,您可能希望将它们存储在列表中,并传入构造函数中的数字。

即:

public class Circle
{
    private int circleId;

    public Circle(int id)
    {
        circleId = id;
    }
}

public class Circles
{
    private static ArrayList<Circle> circleList = new ArrayList<Circle>();

    public static Circle getNewCircle()
    {
        Circle newCircle = new Circle(circleList.size() + 1);
        circleList.add(newCircle);
        return newCircle;
    }
}

答案 5 :(得分:0)

只需使用静态AtomicInteger即可跟踪创建的圈子的实例数。如果您喜欢冒险,您还可以使用soft reference based static cache根据其ID跟踪个别实例。