这是一些遗留代码中的另一种设计模式,我在谷歌上找不到多少。在这种情况下,子类扩展其抽象父级,但然后右转并声明父级的静态实例:
public abstract class MessageBase {
protected DAOFactory factory;
// method declarations
}
public class EDWMessage extends MessageBase {
private static MessageBase instance;
public static MessageBase getInstance(Properties properties) {
if (instance == null) {
instance = new EDWMessageTransaction(properties, null);
}
return instance;
}
//more code
}
我不确定我是否理解将驱动此设计模式的原因(如果它是已知模式)。这是一种方便模式,以避免将父级的每个成员变量声明为静态吗?或者它是否意味着允许多个子类每个都有一个父实例。但是,如果是这样的话,为什么过度使用继承只是简单的组合?
其余代码没有说明为什么会这样做。任何想法或想法将不胜感激。谢谢!
P.S。我似乎在这个我不知道如何处理的遗留代码中遇到了很多有趣的design patterns。感谢所有帮助过我的人。
编辑:扩展代码示例。当我发现实际使用此代码的地方时,将再次编辑。是的没有文件。
答案 0 :(得分:3)
这是线程安全的懒惰单例初始化的常用习惯用法。如果您可以拥有单例类,则委派给私有静态实例化类。
public class MySingleton{
private MySingleton(){
}
public static MySingleton getInstance(){
return SingletonCreator.INSTANCE;
}
private static class SingletonCreator{
private static final MySingleton INSTNACE = new MySingleton();
}
}
不确定这是否是您的子类的使用方式,但这是一个用于保存其父类的静态实例的子类的用例
答案 1 :(得分:0)
最初的意图可能是,对于MessageBase的每个子类,应该只有1个实例,并且您可以使用基类中的commom方法访问该实例
因此您可以迭代所有消息类型并获取每个
的实例我的2cents