我需要做惰性初始化,所以我选择了单例/多例模式,但我也需要一个回调,所以我选择了一个抽象类,但这是矛盾的,它不能同时是单例和抽象类.
然后,作为解决方案,可以避免抽象类并使用单例和接口(执行回调),将它们(接口)作为参数传递。但这有点难看,因为禁止漂亮的 IDE 有助于实现抽象方法。
我想知道这种不可能的组合是否还有其他选择。
选项抽象类 (禁止单/多)
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;
}
//...
}
这里有一个相关的问题 How can I implement an abstract singleton class in Java?