ホームページ  >  記事  >  Java  >  Java のシングルトン パターンの簡単な紹介

Java のシングルトン パターンの簡単な紹介

黄舟
黄舟オリジナル
2017-10-12 10:17:131322ブラウズ

この記事では主にJavaシングルトンパターンの簡単な関連情報を詳しく紹介しますので、興味のある方は参考にしてください

1.コンセプト

シングルトンパターンは一般的に使用されるソフトウェア設計パターンです。そのコア構造には、シングルトン クラスと呼ばれる特別なクラスが 1 つだけ含まれています。シングルトン モードでは、システム内にクラスのインスタンスが 1 つだけ存在し、外部からそのインスタンスに簡単にアクセスできるようにすることができるため、インスタンス数の制御が容易になり、システム リソースが節約されます。特定のクラスのオブジェクトを 1 つだけシステム内に存在させたい場合は、シングルトン パターンが最適なソリューションです。私の意見では、シングルトンでは外部の世界がオブジェクトを作成することはできません。

1.1 概念分析

シングルトンの場合、上記の概念分析から、次の条件を満たす必要があります:

第一: シングルトン クラスにはシングルトン オブジェクトは 1 つだけ存在できます。

第二: シングルトン クラスは独自のを作成する必要があります。固有のインスタンス オブジェクト;

3 番目: このインスタンス オブジェクトは外部の世界からアクセスでき、外部の世界はそれ自体でオブジェクトを作成できません。

2. シングルトン モードの一般的なメソッドのいくつか

Java では、シングルトン モードは通常、遅延モード、ハングリー モード、および登録モードに分類されますが、登録モードは一般にあまり一般的ではないため、無視されがちです。もし著者が今日突然まとめたくなってネットで情報を検索していなかったら、私はこれに気付かなかったでしょう。コードはこのように掲載されており、以下で説明します。

2.1 ハングリースタイルのシングルトンクラス


package com.ygh.singleton;
/**
 * 饿汉式单例类
 * @author 夜孤寒
 * @version 1.1.1
 */
public class HungerSingleton {
  //将构造方法私有,外界类不能使用构造方法new对象
  private HungerSingleton(){}
  //创建一个对象
  private static final HungerSingleton lazySinleton=new HungerSingleton();
  //设置实例获取方法,返回实例给调用者
  public static HungerSingleton getInstance(){
    return lazySinleton;
  }
}

シングルトンが実装されているかどうかをテストするテストクラスを作成します:


package com.ygh.singleton;
/**
 * 测试单例类
 * 
 * @author 夜孤寒
 * @version 1.1.1
 */
public class Test {
  public static void main(String[] args) {
    /*
     * 构造方法私有化,不能够使用下面方式new对象
     */
    //HungerSingleton hungerSingleton=new HungerSingleton();
    //使用实例获取方法来获取对象
    HungerSingleton h1=HungerSingleton.getInstance();
    HungerSingleton h2=HungerSingleton.getInstance();
    System.out.println(h1==h2);//true
  }
}

上記からわかるように、このテストクラスの 2 つの参照は等しいです。つまり、2 つの参照は同じオブジェクトを指しており、シングルトン パターン標準に正確に準拠しています。ここでお腹の空いた中華の紹介は終わりです。

2.2 ハングリースタイルのシングルトンクラス


package com.ygh.singleton;
/**
 * 懒汉式单例类
 * @author 夜孤寒
 * @version 1.1.1
 */
public class LazySingleton {
  //将构造方法私有,外界类不能使用构造方法new对象
  private LazySingleton(){}
  //创建一个对象,不为final
  private static LazySingleton lazySingleton=null;
  //设置实例获取方法,返回实例给调用者
  public static LazySingleton getInstance(){
    //当单例对象不存在,创建
    if(lazySingleton==null){
      lazySingleton=new LazySingleton();
    }
    //返回
    return lazySingleton;
  }
}

テストクラス:


package com.ygh.singleton;
/**
 * 测试单例类
 * 
 * @author 夜孤寒
 * @version 1.1.1
 */
public class Test {
  public static void main(String[] args) {
    /*
     * 构造方法私有化,不能够使用下面方式new对象
     */
    //LazySingleton lazySingleton=new LazySingleton();
    //使用实例获取方法来获取对象
    LazySingleton l1=LazySingleton.getInstance();
    LazySingleton l2=LazySingleton.getInstance();
    System.out.println(l1==l2);//true
  }
}

上記からわかるように、このテストクラスの 2 つの参照は等しい。つまり、2 つの参照は、同じオブジェクトで、シングルトン パターン標準にも適合します。これで怠け者の紹介は終わりです。

2.3 レイジースタイルとハングリースタイルの違い

レイジースタイルは、オブジェクトがない場合にはシングルトンオブジェクトが作成されますが、オブジェクトがある場合にはオブジェクトは作成されません。言うのは簡単ですが、読者がさらに詳しく知りたい場合は、ブレークポイントを使用して Eclipse でテストし、LazySingleton クラスの if 中括弧内のコンテンツにブレークポイントを追加してから、デバッグを使用してそれを Test クラスで実行できます。 、最初にオブジェクトが作成されるが、2 回目にはオブジェクトが作成されないことを示すのは簡単です。

Hungry Chinese スタイルは、final キーワードを使用してオブジェクトを作成することによって実装されます。呼び出し元がインスタンス オブジェクトを必要とする場合、作成されたインスタンスは getInstance メソッドを通じて取得できます。

2.4 登録済みシングルトン クラス

著者は登録済みシングルトン クラスについてあまり詳しくありませんが、自分の学習と参考のためにインターネット上にコードを投稿しました。読者は自分で勉強するように求められます。


りー

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

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