遅延初期化を行う必要があるため、シングルトン/マルチトン パターンを使用しましたが、コールバックも必要だったため、抽象クラスを使用しましたが、それは矛盾しています。シングルトンと抽象クラスを同時に使用することはできません。 .
次に、それに対する解決策として、抽象クラスを回避し、シングルトンとインターフェースを使用して(コールバックを実行するために)、それら(インターフェース)をパラメーターとして渡すことで実装できます..
この不可能なミックスには他に選択肢があるのだろうか。
オプション抽象クラス (シングル/マルチトン禁止)
class abstract Machine
{
abstract hardwareCallBack();
//..
//Here I can't put a constructor for singleton because it's abstract
}
インターフェイス付きのオプションシングルトン(実際にはマルチトンです)
public class Machine {
private CallBackIface callBack; //interface including hardwareCallBack();
private static final Map<String, Machine> instances
= new HashMap<String, Machine>();
private Machine(CallBackIface callback0)
{
callBack=callback0;
}
public static Machine getMachine(String name, CallBackIface callback0)
{
Machine instance = instances.get(name);
if (instance == null) //plus sync stuff...
{
instance = new Machine(callback0);
instances.put(name, instance);
}
return instance;
}
//...
}
ここに関連する質問 Java で抽象シングルトン クラスを実装するにはどうすればよいですか?