2010-12-12 63 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

我不知道你是如何設計你的系統的。但是我所擁有的是一箇中心位置,我的所有形狀都可以存儲並可以添加/刪除。這個商店也可以負責計算它創建/刪除的對象以及它們的命名方式。

我認爲如果你不打算擴展程序/沒有很大的需求,靜態變量是一個簡單的解決方案。