English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Java フローコントロール

Java 配列

Java オブジェクト指向(I)

Java オブジェクト指向(II)

Java オブジェクト指向(III)

Java 異常処理

Java リスト(リスト)

Java キュー(キュー)

Java Mapコレクション

Java Setコレクション

Java 入出力(I/O)

Java Reader/Writer

Javaの他のトピック

Java シングルモード

このチュートリアルでは、サンプルを使用してシングルトンデザインパターンとそのJavaでの適用方法を学びます。

Singleton(シングルトン)はJava特有の機能ではなく、デザインパターンです。これにより、1つのクラスのインスタンスのみが作成されます。

デザインパターンは私たちのコードベースと同じように、世界中のプログラマーが共有するさまざまなコーディング技術が含まれています。

Java シングルモード

以下はJavaで単例を使用する方法です。

  • クラス外部でのオブジェクトの作成を制限するためにプライベートなコンストラクタを作成

  • 単例オブジェクトの参照を持つプライベートな属性を作成

  • public staticメソッドを作成し、それを使用して作成したオブジェクトを生成およびアクセスすることができます。メソッド内で、複数のオブジェクトの作成を制限する条件を作成します。

これはインスタンスです。

class SingletonExample {
    //オブジェクトの参照を含むプライベートなフィールド
   private static SingletonExample singleObject;
   private SingletonExample() {
       //SingletonExampleクラスのコンストラクタ
   }
   public static SingletonExample getInstance() {
        //オブジェクトを1つだけ作成できるようにするコードを記述
        //必要に応じてオブジェクトにアクセス
   }
}

上記の例では、

  • private static SingletonExample singleObject - クラスオブジェクトの参照

  • private SingletonExample() - プライベートなコンストラクタ、クラス外部でのオブジェクトの作成を制限するために使用されます。

  • public static SingletonExample getInstance() - このメソッドは、このクラスのユニークなオブジェクトへの参照を返します。このメソッドが静的であるため、クラス名を使用してアクセスできます。

単例クラスを使用

データベースを使用する際には単例を使用できます。これらは、データベースにアクセスするために接続プールを作成し、すべてのクライアントが同じ接続を共有できるようにします。例えば、

class Database {
   private static Database dbObject;
   private Database() {      
   }
   public static Database getInstance() {
      //オブジェクトの作成(まだ作成されていない場合)
      if(dbObject == null) {
         dbObject = new Database();
      }
       //単例オブジェクトを返します
       return dbObject;
   }
   public void getConnection() {
       System.out.println("現在はデータベースに接続されています。");
   }
}
class Main {
   public static void main(String[] args) {
      Database db1;
      //データベースのユニークなオブジェクトを参照
      db1= Database.getInstance();
      
      db1.getConnection();
   }
}

プログラムを実行すると、出力は以下のようになります:

今やデータベースに接続されています。

上記の例では、

  • 私たちはSingletonクラスDatabaseを作成しました。

  • dbObjectはクラスタイプのフィールドです。これはDatabaseクラスのオブジェクトを参照します。

  • プライベートなコンストラクタDatabase()は、クラス外部でのオブジェクトの作成を防ぎます。

  • 静的クラスタイプメソッドgetInstance()は、クラスのインスタンスを外部に返します。

  • Mainクラスでは、dbというクラスタイプの変数があります1。私たちはdbを使用しています1getInstance()を呼び出して、Databaseのユニークなオブジェクトを取得します。

  • このgetConnection()メソッドは、Databaseオブジェクトを使用してのみアクセスできます。

  • Databaseは1つのオブジェクトしか持てないため、すべてのクライアントは1つの接続を通じてデータベースにアクセスできます。

ログなどの少数のケース(例えば、ログ)のみでシングルトンが意味を持つことがあります。データベース接続も通常、シングルトンではありません。

シングルトンを使用するかどうかが不明な場合は、完全にシングルトンを使用することを避けることをお勧めします。