この記事では、主に 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) このクラスのオブジェクトをカスタマイズする
分析:
最初のステップ: シングルトン クラスのコンストラクターをプライベート化し、get() 関数を使用してそのようなオブジェクトを外部に提供するため、他のクラスはそのようなオブジェクトを構築できません。
ステップ 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; } }
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シングルトンパターンの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。