(9)のプロトタイプモデルを学習ソフトウェアのデザインパターン

シングルトン

例は、シングルモードシステムにクラスインスタンスのインスタンスを1つだけ確保し、外部は、このようにインスタンスの数のシステムリソース保存制御が容易、簡単にアクセス可能です。あなたは、クラスのオブジェクトがシステム内にのみ存在することができますしたい場合は、シングルトンは最適なソリューションです。


動機と定義されたモード

システムのいくつかの種類には、インスタンスが1つだけ重要であり、例えば、システムは唯一のウィンドウマネージャまたはファイルシステムであってもよいがあります。したがって、唯一のインスタンスであり、クラスの一意性を保証するシステムの目的は、重要です。

シングルトンは、特定のクラスのインスタンスを1つだけ確保し、システム全体のインスタンスをインスタンス化し、このクラスはグローバルアクセス方法を提供するシングルトンクラスと呼ばれている提供します。シングルトン三点:まず、クラスの唯一のインスタンス;第二、それ自身のインスタンスを作成する必要があり、それはこの例では、独自の3全体のシステムを提供しなければなりません。


パターン分析

シングルトンオブジェクトは、クラスのインスタンスを1つだけ確保し、そのアクセスポイントへのグローバルアクセスを提供することです。シングルトンクラスは、ユーザーが新しいキーワードを介して直接インスタンス化できないことを保証するために、プライベートコンストラクタを持っています。また、モデルは静的なプライベートメンバ変数のpublic staticファクトリメソッドが含まれている、ファクトリメソッドの存在は、インスタンスと、独自の例を確認する責任があり、その後、唯一のインスタンスが作成されることを保証するために、静的メンバ変数に格納されます。こうして三点注シングルモードの実施形態の実装:

  1. シングルトンクラスのコンストラクタはプライベートです
  2. 自身の静的なプライベートメンバ変数
  3. 公共の静的なファクトリメソッドを提供
public class Singleton {

    private static Singleton instance = null;

    //私有构造方法
    private Singleton() {

    }

    //静态公有工厂方法,返回唯一实例
    public static Singleton getInstance() {

        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
public class Client {

    public static void main(String[] args) {

        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);
    }
}

ここに画像を挿入説明

単一のクラスと怠惰な式を飢え例シングルトン

クラスがオブジェクトシングルトンロードされたクラスのシングルトンインスタンス化静的変数の定義で作成されています。このクラスがロードされると、静的インスタンス変数が初期化され、その後、プライベートクラスのコンストラクタが呼び出され、シングルトンクラスの唯一のインスタンスが作成されます。

public class EagerSingleton {

    private static final EagerSingleton instance = null;

    private EagerSingleton() {

    }

    public static EagerSingleton getInstance() {

        return instance;
    }
}

例えば遅延単一静的クラス変数は、単一の実施形態のオブジェクト・クラス・ロードを作成しなかった、従ってシングルトンインスタンス時に定義されたが、ファクトリメソッドは、単一の実施形態の静的クラスのインスタンスを呼び出すとき、およびされていません。

public class LazySingleton {

    private static LazySingleton instance = null;

    private LazySingleton() {

    }

    public static LazySingleton getInstance() {

        if(instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

リソースの利用効率の観点から、式の怠惰な単一のアナログの実施形態は、わずかに良いシングルトンクラスを飢え。およびビューの速度の点から反応時間を、わずかに良い怠惰式の単一のアナログ実施形態を飢え。ただし、インスタンス化で怠惰な人間のシングルトンクラス、そのような制限は、アクセスの問題を挙げ、初めて同時に複数のスレッドに対処しなければなりません。

おすすめ

転載: www.cnblogs.com/Yee-Q/p/12459989.html