1

遅延初期化を行う必要があるため、シングルトン/マルチトン パターンを使用しましたが、コールバックも必要だったため、抽象クラスを使用しましたが、それは矛盾しています。シングルトンと抽象クラスを同時に使用することはできません。 .

次に、それに対する解決策として、抽象クラスを回避し、シングルトンとインターフェースを使用して(コールバックを実行するために)、それら(インターフェース)をパラメーターとして渡すことで実装できます..

この不可能なミックスには他に選択肢があるのだろうか。

オプション抽象クラス (シングル/マルチトン禁止)

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 で抽象シングルトン クラスを実装するにはどうすればよいですか?

4

0 に答える 0