【发布时间】:2018-09-14 09:19:30
【问题描述】:
我正在尝试用 Java 中的抽象类实现单例实例。我读过喜欢将其实现为 LazyLoad 是最佳实践。我做不到,因为我不太习惯这种模式甚至 Java。
- getInstance() 总是为空,我不知道为什么?
- 我不认为这是在构造实例时遵循延迟加载。
- 除此之外,欢迎任何其他 cmets,因为我是 Java 的新手,之前使用过 c#。
这就是我所拥有的,
界面:
public interface IConditionAppender{
public String Append();
}
摘要
public abstract AppenderBase {
private static IConditionAppender instance;
protected AppenderBase(IConditionAppender instance)
{
this.instance = instance;
}
public static IConditionAppender getInstance(){ return instance; }
}
实施
public final class AndAppender extends AppenderBase implements IConditionAppender {
private AndAppender()
{
super(new AndAppender())
}
@Override
public String Append()
{
return " AND ";
}
}
测试
System.out.println(AndAppender.getInstance().Append());
【问题讨论】:
-
你在哪里调用
AppenderBase的参数化构造函数? -
@AshishkumarSingh,抱歉错过了新关键字,它是在 AndAppender 类中构造的
-
为什么你的 AndAppender 类构造函数是私有的?
-
使用这种设计,您无法创建
OrAppender,因为AppenderBase中的instance静态字段将被替换 -
不要通过继承实现 Singleton,因为它使用了后期绑定不涉及的静态字段和方法。您应该为每个 And/OrOperation 类实现 Singleton
标签: java singleton lazy-loading