簡體   English   中英

如何擴展單例類以處理特定數量的對象

[英]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類來實現,根據定義,它應該返回它擁有的唯一實例。

建議閱讀:

  1. Java 中的對象池
  2. 構建你自己的對象池

您可以添加同一對象的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM