[英]How to extend a singleton class to handle a specific number of objects
在 Java 中,我創建了一個單例類,如下所示:
public class Singleton
{
private Singleton() { print("Singleton Constructor"); }
private static Singleton pointer = new Singleton();//static here so only one object
public static Singleton makeSingleton()
{
return pointer;
}
public static void main (String args[])
{
Singleton nuReference = Singleton.makeSingleton();
if(nuReference == pointer)
{
print("Both are references for same object.");
}
}
}
在這里,只返回對已創建的 Singleton 類對象的引用。 如何創建一個類,以便只允許創建該類的四個對象? 我可以為此使用這個 Singleton 類還是必須從頭開始?
哦,print() 是我的自定義方法。 與System.out.println()
工作System.out.println()
相同,只是擊鍵次數更少:)
那應該工作:
public class Singleton
{
private Singleton()
{
print("Constructor");
}
private static Singleton instances[] = new Singleton[4];
private static Boolean initiated = false;
public static Singleton getInstance(int index)
{
tryInitiate();
if(instances[index] == null)
{
instances[index] = new Singleton();
}
return instances[index];
}
private static Boolean tryInitiate()
{
if(initiated) return false;
for (int i = 0; i < instances.length; i++)
{
instances[i] == null;
}
initiated = true;
return true;
}
}
除了使用“null”初始化對象之外,您還可以在初始化期間實例化對象。 但是這樣只會實例化所需的對象。
添加靜態 int count = numyouwant; 對於你的代碼,每次調用靜態創建方法時,將count減1。更重要的是,在調用創建方法中的私有構造函數之前檢查count是否為0~
根據定義,單身人士只有一個自己的實例。 您的建議聽起來像您會更好地使用工廠類型的范例以及計數器/限制器(內置於類中)。
創建一個包含計數器(或存儲創建對象的列表,如果您願意)和createObject
方法的工廠類。 在方法中,做你的邏輯來確定是否有太多的對象,因此你可能會限制對象的創建。
這是對創建的對象具有最大限制的Factory
示例。 為簡單起見,所討論的對象是內部類。
public class Factory {
private final int maxObj = 4;
public class MyObject {
MyObject() { print("Constructor"); }
}
private List<MyObject> objects = new List<Object>();
// Returns new MyObject if total MyObject
// count is under maxObj, null otherwise
public MyObject makeObject() {
if (objects.length() >= maxObj)
return null;
MyObject obj = new MyObject();
objects.add(obj);
return obj;
}
}
創建變量 x
每次調用 makeSingleton 時都會增加它的值
如果 x<4 則返回指針
否則返回空
創建一個字段List<Singleton> mySingletons;
和一個字段int singletonCounter=0;
在 makeSingleton() 方法中,如果計數器等於 4,則向計數器加 1,返回 null 或返回 4 的單例。如果計數器小於 4,則創建單例。
我的問題是如何創建一個類,以便只允許創建該類的 4 個對象。 有什么幫助嗎? 我可以為此使用這個 Singleton 類還是必須從頭開始?
我相信你想保留一個類的對象池。 您不能通過Singleton類來實現,根據定義,它應該返回它擁有的唯一實例。
建議閱讀:
您可以添加同一對象的 4 個實例的隊列,並管理隊列/出隊操作。
當心:聽起來您應該為這些操作應用線程安全。
我用線程安全創建了一個
import java.util.ArrayList;
import java.util.List;
public class SingletonLimit{
private List<SingletonLimit> inst_Obj= new ArrayList<>();
private static final int maxLimit=4;
private SingletonLimit(){
}
public SingletonLimit getInstance(){
if(inst_Obj.size()>=maxLimit)
return null;
SingletonLimit singleLimit=null;
synchronized(SingletonLimit.class){
singleLimit= new SingletonLimit();
inst_Obj.add(singleLimit);
}
return singleLimit;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.