我有一个java程序,当点击一个按钮时,允许新绘图,每个按钮都是一个带有数字的圆。在运行时访问对象!
我想要做的是当我创建3个圆圈时,我创建的圆圈内部的数字是1-3,但要做到这一点,我需要能够跟踪用户已有的圆对象的数量创建。
我已经想过使用的instanceof但是这似乎是实现它
知道的任何想法的原始方法。 谢谢 Chris
我有一个java程序,当点击一个按钮时,允许新绘图,每个按钮都是一个带有数字的圆。在运行时访问对象!
我想要做的是当我创建3个圆圈时,我创建的圆圈内部的数字是1-3,但要做到这一点,我需要能够跟踪用户已有的圆对象的数量创建。
我已经想过使用的instanceof但是这似乎是实现它
知道的任何想法的原始方法。 谢谢 Chris
如果我正确地理解了你,这更多的是设计问题而不是实现问题。设计对于各种应用程序非常重要,因为它们可以帮助您更好地组织代码。在编写第一行代码之前,通常需要几个小时的思考才能帮助您节省更多的时间。我希望我的回答能回答你的问题。
试着将其视为一个MVC应用程序,其中您的组件是视图层,模型将是一个存储实例数量(或对它们的引用)的bean,控制器将是由“事件“来自视图和模型图层。
正如上面的答案中所提到的,您将需要一个中心点来访问您的数据,因此您需要确保UI状态只有一个bean表示形式。这可以通过使用单例模式来实现,如使用静态字段或使用服务提供者外观来访问对象,其中任何一个都可以完成这项工作。当然,你需要选择最适合你的项目的方法,过度设计也是一件坏事;)
你可能想要做PureMVC框架的教程,这是一个相当简单和轻量级的。我会推荐至少做这个教程并阅读文档,以便你能理解这个想法。你不需要使用它,但它对教育目的会很好。
提供我正确理解您的问题,您需要的全局变量(例如静态)每次创建Circle对象时都会增加,例如,来自构造函数。
如果圆圈的数量只能增加(圆圈不能被删除),那么你想在Circle类中使用static variable来跟踪该类被实例化的次数。
即:
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;
}
}
我认为这样的设计会在短期内导致代码重复(OP很快会想要添加正方形,星形......)并且难以发现错误(当一个圆被删除时,圆的数量在哪里减少?谁负责这个?) – 2010-12-12 13:14:26
@MarvinLabs:已删除?你如何删除Java中的对象?当然你的意思是超出范围,对吧?在这种情况下,OP可以使用其中一种参考类型(软,弱,幻像)进行必要的清理。 – 2010-12-12 13:19:43
不,我的意思是删除视觉,然后会导致2个可见的圆圈,下一个被命名为1-4而不是1-3,因为它应该是。 – 2010-12-12 13:22:13
另一种方式来做到这一点,是让你圆对象一个ArrayList,这样你可以检查有多少个圈存在由.size()方法的手段。另一个优点是您可以轻松更改/删除特定的圈子。
编辑: 额外的奖励,你想在圆圈表示的数字是圆的指数+ 1
只需使用一个静态AtomicInteger
这将保持跟踪你的实例的计数创建的圈子。如果您感觉颇具冒险精神,您还可以使用soft reference based static cache根据其ID来跟踪各个实例。
我不知道你是如何设计你的系统的。但是我所拥有的是一个中心位置,我的所有形状都可以存储并可以添加/删除。这个商店也可以负责计算它创建/删除的对象以及它们的命名方式。
我认为如果你不打算扩展程序/没有很大的需求,静态变量是一个简单的解决方案。
单身模式是我正在看我面临的问题是,我可能需要大量的圆对象,因此单身可能不是很好?我可以通过创建一个圈子来实现这一点,但这看起来非常粗糙,我打算有一个更好的方法来做到这一点。 – Chris 2010-12-13 14:11:43