我有一個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