JavaFX でシングルトン

JavaFX は static が使えないので、シングルトンパターンは実装できないかと思っていました。でも、ちょっと考えたらできたので、のせておきます。

JavaFX には static はないのですが、スクリプトファイルにクラスを定義する以外に変数や関数を定義することができます。(ステートメントを書くことはできません)

たとえば、Sample.fx に次のように書くことができます。

/*
 * Sample.fx
 */
public var text = "Hello, World!";
public function sayHello(): String {
   text;
}

public class Sample {}

Sample.fx の text 変数や sayHello 関数にアクセスするには次のように書けます。

println("{Sample.text}");
println("{Sample.sayHello()}");

これを利用するとシングルトンが書けます。

/*
 * Singleton.fx
 */
var instance: Singleton;

public function getInstance(): Singleton {
    if (instance == null) {
        instance = Singleton {};
    }

    instance;
}

public class Singleton {}

使い方は、

var singleton: Singleton = Singleton.getInstance();

このように、あたかも static 関数のように書くことができますよ。

でも、Google で検索したら James Weaver が同じ方法をすでに blog に書いてました ><