AspectJ を使ったデザインパターンの改善と支援 >
Singleton

asato <asato@ncfreak.com>

最終更新日 : 2002/9/26 (2002/9/26 より)

Singleton

あるクラスに対してインスタンスが 1 つしか存在しないことを保証し、それにアクセスするためのグローバルな方法を提供する。

考慮点

AspectJ を使った Singleton に関するテクニックの種類

暗黙の Singleton

意図: ソースコードからは Singleton だとは分からないが、暗黙のもとに、生成されるインスタンスが 1 つしか存在しないようにする。

適用可能性:

結果:

サンプルコード:

package dp.singleton;

public class Printer { }
package dp.singleton;

public aspect PrinterAspect {
	pointcut newPrinter() : call( Printer.new() );

	private static final Printer Printer.instance = new Printer();

	Printer around() : newPrinter() {
		return Printer.instance;
	}
}
package dp;

import dp.singleton.*;

public class Client {

	public static void main(String[] args) {

		Printer printer1 = new Printer();
		Printer printer2 = new Printer();

		System.out.println(printer1 == printer2); // true
	}
}