我有一个java程序,允许在单击按钮时创建新图形,比如说每个按钮都是一个带有数字的圆圈。
我想要做的是,当我创建3个圆圈时,我创建的圆圈内的数字是1-3,但要做到这一点,我需要能够跟踪用户已经创建的圆形对象的数量
我考虑过使用InstanceOf,但这似乎是实现它的粗略方式
赞赏任何想法。 谢谢 克里斯
答案 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跟踪个别实例。