2010-12-12 28 views
0

我有一个java程序,当点击一个按钮时,允许新绘图,每个按钮都是一个带有数字的圆。在运行时访问对象!

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

我已经想过使用的instanceof但是这似乎是实现它

知道的任何想法的原始方法。 谢谢 Chris

回答

2

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

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

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

你可能想要做PureMVC框架的教程,这是一个相当简单和轻量级的。我会推荐至少做这个教程并阅读文档,以便你能理解这个想法。你不需要使用它,但它对教育目的会很好。

+0

单身模式是我正在看我面临的问题是,我可能需要大量的圆对象,因此单身可能不是很好?我可以通过创建一个圈子来实现这一点,但这看起来非常粗糙,我打算有一个更好的方法来做到这一点。 – Chris 2010-12-13 14:11:43

0

提供我正确理解您的问题,您需要的全局变量(例如静态)每次创建Circle对象时都会增加,例如,来自构造函数。

0

如果圆圈的数量只能增加(圆圈不能被删除),那么你想在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; 
    } 
} 
+0

我认为这样的设计会在短期内导致代码重复(OP很快会想要添加正方形,星形......)并且难以发现错误(当一个圆被删除时,圆的数量在哪里减少?谁负责这个?) – 2010-12-12 13:14:26

+0

@MarvinLabs:已删除?你如何删除Java中的对象?当然你的意思是超出范围,对吧?在这种情况下,OP可以使用其中一种参考类型(软,弱,幻像)进行必要的清理。 – 2010-12-12 13:19:43

+0

不,我的意思是删除视觉,然后会导致2个可见的圆圈,下一个被命名为1-4而不是1-3,因为它应该是。 – 2010-12-12 13:22:13

1

另一种方式来做到这一点,是让你圆对象一个ArrayList,这样你可以检查有多少个圈存在由.size()方法的手段。另一个优点是您可以轻松更改/删除特定的圈子。

编辑: 额外的奖励,你想在圆圈表示的数字是圆的指数+ 1

0

只需使用一个静态AtomicInteger这将保持跟踪你的实例的计数创建的圈子。如果您感觉颇具冒险精神,您还可以使用soft reference based static cache根据其ID来跟踪各个实例。

1

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

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