编程语言
首页 > 编程语言> > java-什么时候以及为什么Child类声明父类的静态实例成员?

java-什么时候以及为什么Child类声明父类的静态实例成员?

作者:互联网

这是一些遗留代码中的另一种设计模式,我在google上找不到很多.在这种情况下,子类扩展了其抽象父级,但随后转过来并声明了父级的静态实例:

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
}

我不确定我是否会理解这种设计模式(如果它是已知模式).这是一种便捷模式,可以避免将父级的每个成员变量声明为静态吗?还是意味着允许多个子类每个都有一个父实例.但是,如果是这样的话,为什么仅仅在简单的构成上过多地使用继承呢?

其余的代码没有说明为什么要用这种方法.任何想法或想法将不胜感激.谢谢!

附言在这个我不知道如何处理的旧代码中,我似乎遇到了很多有趣的design patterns.感谢所有已经帮助我的人.

编辑:扩展代码示例.当我发现实际使用此代码的某个地方时,将再次进行编辑.是的,没有文档.

解决方法:

这是线程安全的懒惰单例初始化的常见用法.如果可以有一个单例类,则可以委派给一个私有的静态实例化类.

public class MySingleton{

   private MySingleton(){

   }

   public static MySingleton getInstance(){
       return SingletonCreator.INSTANCE;
   }

   private static class SingletonCreator{
     private static final MySingleton INSTNACE = new MySingleton();
   }
}

不知道这是否是您的子类的使用方式,但是这对于持有父类静态实例的子类来说将是一个用例

标签:legacy-code,java,design-patterns,refactoring
来源: https://codeday.me/bug/20191208/2094946.html