作成タイプ
1.シングルトンデザインパターン
2.ファクトリーデザインパターン
3.ビルダーデザインパターン
4.プロトタイプデザインパターン
構造タイプ
5.エージェンシーデザインパターン
6、ブリッジングデザインパターン
7、デコレーションデザインパターン
8、アダプターデザインパターン
9、アピアランスデザインパターン
10、フライウェイトデザインパターン
11、コンビネーションデザインパターン
行動
前書き
シングルトンデザインパターンは非常に簡単に解決できます。クラスは1つのオブジェクト(またはインスタンス)のみを作成でき、このクラスはシングルトンクラスです。このデザインパターンは、シングルトンデザインパターン、または略してシングルトンパターンと呼ばれます。
シングルトンを実装するときに考慮すべき一般的な条件:
1.コンストラクターはprivateで装飾され、アクセス権限はnewによるインスタンス(オブジェクト)の外部作成を回避するために使用されます;
2。オブジェクトを作成するときのスレッドの安全性を考慮します;
3。遅延ロードをサポートするかどうかを検討します;
4。getInstance()のパフォーマンスが高いかどうかを検討します(ロックするかどうか)。
実現する方法
シングルトンモード:空腹の男、怠惰な男、二重検出、静的内部クラス、列挙;
1.空腹の中国人
public class Setting {
private static final Setting mSetting= new Setting();
private Setting() {
}
public static Setting getInstance() {
return mSetting;
}
}
短所:クラスがロードされると、mSettingの静的インスタンスが作成および初期化されます。レイジーロードはサポートされません(必要に応じてシングルトンオブジェクトを作成します)
利点:mSettingインスタンスの作成プロセスはスレッドセーフです(クラスのロード中に、静的mSettingインスタンスはすでに初期化されているため、mSettingインスタンスの作成はスレッドセーフです)
2、遅延
public class Setting {
private static Setting mSetting;
private Setting() {
}
public static synchronized Setting getInstance() {
if (mSetting == null) {
mSetting = new Setting();
}
return mSetting;
}
}
短所:getInstance()はロックを追加します。頻繁に呼び出されると、効率が非常に低くなり(毎回ロックして解放する)、同時実行性が非常に低くなり、1になります。
利点:読み込みを遅らせることができます。
3.二重検出
public class Setting {
private static Setting mSetting;
private Setting() {
}
public static Setting getInstance() {
if (mSetting == null) {
synchronized (Setting.class) {
if (mSetting == null) {
mSetting = new Setting();
}
}
}
return mSetting;
}
}
利点:遅延読み込みと高い同時実行性の両方がサポートされます
4.静的内部クラス
public class Setting {
private Setting() {
}
private static class SettingHolder{
private static final Setting mSetting = new Setting();
}
public static Setting getInstance() {
return SettingHolder.mSetting;
}
}
利点:スレッドの安全性を確保しながら、レイジーロードも実行されます。Settingクラスがロードされると、静的内部クラスSettingHolderは作成されず、getInstance()が呼び出されたときにのみロードされます。mSettingの一意性、作成プロセスのスレッドの安全性パフォーマンスはJVMによって保証されています。
5.列挙
public enum Setting{
INSTANCE
}
概要:上記の5つの実装はすべてスレッドセーフです。