ホームページ  >  記事  >  Java  >  Javaシングルトンパターンの詳しい説明

Javaシングルトンパターンの詳しい説明

巴扎黑
巴扎黑オリジナル
2017-09-18 11:32:401216ブラウズ

この記事では、主に Java シングルトン モード (ハングリーマン モードとレイジーマン モード) の関連情報を紹介します。必要な方は、この記事を通じてこの部分をマスターしていただければ幸いです。

Java シングルトン モード

Hungry スタイルのシングルトン

Hungry-Han パターンに関しては、次のように理解できます。シングルトン クラスは非常にお腹が空いており、緊急に食事をする必要があるため、クラスがロードされるとすぐにオブジェクトを作成します。

Lazy Singleton Class

Lazy モデルについては、次のように理解できます。このシングルトン クラスは非常に怠惰で、必要な場合にのみ動作し、事前に準備する方法を知りません。オブジェクトが必要な場合にのみオブジェクトが存在するかどうかを判断し、存在しない場合はオブジェクトを作成せずにすぐに返します。

シングルトン設計パターンは、JDBC リンクされたデータベースでよく使用されます

注:

1 私たちは、通常、最初の飢えた中国スタイルを使用します。理由は次のとおりです:

(1) シングルトン設計パターンが採用されているため、 for シングルトンクラスのオブジェクトを使用するので、最初にインスタンス化します

(2) 遅延スタイルには特定のセキュリティリスクがあります。同期キーワード synchronized を追加する必要があります。そうしないとシングルトンが存在しません。同期されているため、効率はわずかに低くなります

2 最初のメソッドでは、コード private static Final Single SINGLE=new Single(); なぜ、final があるのですか?

final キーワードによって変更されたクラスは継承できないため、メンバーFinal によって変更された変数は変更できません。

Final は、「同じオブジェクト」という概念を強化し、強調するために使用されます。そのようなオブジェクトは 1 つだけ存在し、変更しないと変更できません。 SINGLE を Final にすると、状況が発生します。ビジネスが非常に複雑で、このオブジェクトが誤って変更され、さまざまなエラーが発生します。 1) 他のクラスにこのクラスのオブジェクトを作成させないでください。つまり、コンストラクターをプライベートに設定します。
(2) このクラスのオブジェクトをカスタマイズする

(3) カスタマイズされたオブジェクトを提供します。つまり、get メソッドを定義し、戻り値はこのクラスのオブジェクトになります。

分析:
最初のステップ: シングルトン クラスのコンストラクターをプライベート化し、get() 関数を使用してそのようなオブジェクトを外部に提供するため、他のクラスはそのようなオブジェクトを構築できません。

ステップ 2: ただし、他のクラスがこのシングルトン クラスのメソッドを呼び出したい場合、内部名.メソッド名 () を使用して実装することしかできません。そのためには、このメソッドが静的である必要があります。

ステップ 3: 静的メソッドは静的メンバーのみにアクセスできるためです。 SINGLE を static に設定します


public class SingleDemo { 
  public static void main(String[] args) { 
     Single s1=Single.getSingle(); 
     s1.setNumber(44); 
     Single s2=Single.getSingle(); 
     s2.setNumber(55); 
     System.out.println("s1.number="+s1.number); 
     System.out.println("s2.number="+s2.number); 
     if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
   } 
} 
 
 
class Single{ 
  int number; 
  public int getNumber() { 
       return number; 
     } 
  public void setNumber(int number) { 
       this.number = number; 
     } 
  private Single(){};//第一步 
  private static final Single SINGLE=new Single();//第三步 
  public static Single getSingle(){//第一步和第二步 
       return SINGLE; 
  } 
}


2 番目 (遅延スタイル):



package cn.com; 
public class SingleDemo2 { 
   public static void main(String[] args) { 
      Single s1=Single.getSingle(); 
      s1.setNumber(44); 
      Single s2=Single.getSingle(); 
      s2.setNumber(55); 
      System.out.println("s1.number="+s1.number); 
      System.out.println("s2.number="+s2.number); 
      if(s1.equals(s2)){ 
        System.out.println("s1与s2是同一对象即:s1==s2");//if条件成立 
       } 
     } 
 
 
} 
 
 
class Single{ 
   int number; 
   public int getNumber() { 
       return number; 
     } 
   public void setNumber(int number) { 
       this.number = number; 
     } 
   private Single(){}; 
   private static Single SINGLE=null; 
   public static synchronized Single getSingle(){//多线程时加上synchronized是关键!!! 
      if(SINGLE==null){ 
         SINGLE=new Single(); 
         return SINGLE; 
       } 
      else{ 
         return SINGLE; 
        } 
   } 
}

上記は Java シングルトン設計パターンの詳細な説明です。ご質問がある場合は、メッセージを残すか、お問い合わせください。このページに移動 サイト コミュニティはコミュニケーションとディスカッションを行っています。読んでいただきありがとうございます。皆さんのお役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

以上がJavaシングルトンパターンの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。