JAva設計モードの単例設計モード(4)
1.1.4単例モード
クラスにインスタンスが1つしかないことを保証します.*は、そのグローバル・アクセス*ポイントを提供します.
適用性
1.クラスに*例が1つしかなく、お客様がよく知られているアクセスポイントからアクセスできる場合.
2.この唯一のインスタンスがサブクラス化によって拡張可能であり、お客様がコードを変更することなく拡張インスタンスを使用できる必要がある場合.
参加者
Singleton
Instanceアクションを定義し、お客様が唯一のインスタンスにアクセスできるようにします.Instanceはクラス操作です.
負の*は独自のインスタンスを作成します.
クラス図
例
Singleton
public class Singleton {
private static Singleton sing;
private Singleton() {
}
public st*tic Singleton get*nstance() {
if (sing == null) {
sing = new Singleto*();
}
return sing;
}
}
Test
public class Test {
public static void *ain(*tring[] args) {
Singleton sing = Singleton.getInstance();
Singleton si*g2 = Singleton.getI*stance();
System.out.println(sing);
System.out.pr*ntln(sing2);
}
}
result
singleton.Singleton@1c78e57
singleton.Singleton@1c78e57
クラスにインスタンスが1つしかないことを保証します.*は、そのグローバル・アクセス*ポイントを提供します.
適用性
1.クラスに*例が1つしかなく、お客様がよく知られているアクセスポイントからアクセスできる場合.
2.この唯一のインスタンスがサブクラス化によって拡張可能であり、お客様がコードを変更することなく拡張インスタンスを使用できる必要がある場合.
参加者
Singleton
Instanceアクションを定義し、お客様が唯一のインスタンスにアクセスできるようにします.Instanceはクラス操作です.
負の*は独自のインスタンスを作成します.
クラス図
例
Singleton
public class Singleton {
private static Singleton sing;
private Singleton() {
}
public st*tic Singleton get*nstance() {
if (sing == null) {
sing = new Singleto*();
}
return sing;
}
}
Test
public class Test {
public static void *ain(*tring[] args) {
Singleton sing = Singleton.getInstance();
Singleton si*g2 = Singleton.getI*stance();
System.out.println(sing);
System.out.pr*ntln(sing2);
}
}
result
singleton.Singleton@1c78e57
singleton.Singleton@1c78e57