Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 單例模式

在本教程中,我們將借助示例學(xué)習(xí)單例設(shè)計模式以及如何在Java中應(yīng)用它。

Singleton(單例)是一種設(shè)計模式,而不是Java特有的功能。它確保只創(chuàng)建一個類的實例。

設(shè)計模式就像我們的代碼庫一樣,其中包含世界各地程序員共享的各種編碼技術(shù)。

Java 單例模式

下面是我們?nèi)绾卧贘ava中使用單例的方法。

  • 創(chuàng)建一個private的構(gòu)造函數(shù),該構(gòu)造函數(shù)限制在類之外創(chuàng)建對象

  • 創(chuàng)建一個引用單例對象的private屬性。

  • 創(chuàng)建一個public static方法,該方法允許我們創(chuàng)建和訪問我們創(chuàng)建的對象。 在方法內(nèi)部,我們將創(chuàng)建一個條件來限制我們創(chuàng)建多個對象。

這是一個實例。

class SingletonExample {

    //引用對象的私有字段
   private static SingletonExample singleObject;

   private SingletonExample() {
       //SingletonExample類的構(gòu)造函數(shù)
   }

   public static SingletonExample getInstance() {
        //編寫僅允許我們創(chuàng)建一個對象的代碼
        //根據(jù)需要訪問對象
   }
}

在以上示例中,

  • private static SingletonExample singleObject - 對類對象的引用。

  • private SingletonExample() - 私有構(gòu)造函數(shù),用于限制在類外部創(chuàng)建對象。

  • public static SingletonExample getInstance() - 此方法返回對該類唯一對象的引用。 由于該方法是靜態(tài)的,因此可以使用類名進(jìn)行訪問。

使用單例類類

使用數(shù)據(jù)庫時可以使用單例。它們可用于創(chuàng)建連接池以訪問數(shù)據(jù)庫,同時為所有客戶端重用相同的連接。例如,

class Database {
   private static Database dbObject;

   private Database() {      
   }

   public static Database getInstance() {

      //創(chuàng)建對象(如果尚未創(chuàng)建)
      if(dbObject == null) {
         dbObject = new Database();
      }

       //返回單例對象
       return dbObject;
   }

   public void getConnection() {
       System.out.println("現(xiàn)在已經(jīng)連接到數(shù)據(jù)庫。");
   }
}

class Main {
   public static void main(String[] args) {
      Database db1;

      //引用Database的唯一對象
      db1= Database.getInstance();
      
      db1.getConnection();
   }
}

當(dāng)我們運(yùn)行程序時,輸出將是:

現(xiàn)在已經(jīng)連接到數(shù)據(jù)庫。

在上面的示例中,

  • 我們創(chuàng)建了一個單例類Database。

  • dbObject是一個類類型字段。 這將引用類Database的對象。

  • 私有構(gòu)造函數(shù)Database(),可防止在類外部創(chuàng)建對象。

  • 靜態(tài)類類型方法getInstance()將類的實例返回給外部。

  • 在Main類中,我們具有類類型變量db1。 我們正在使用db1調(diào)用getInstance()來獲取Database的唯一對象。

  • 該方法getConnection()只能使用的對象進(jìn)行訪問Database。

  • 由于Database只能有一個對象,因此所有客戶端都可以通過單個連接訪問數(shù)據(jù)庫。

需要注意的是,只有少數(shù)情況(如日志)使單例有意義。甚至數(shù)據(jù)庫連接通常也不應(yīng)該是單例的。

如果您不確定是否使用單例,我們建議您避免完全使用單例。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清