什么是在不传递给构造函数的情况下将一个类的实例用于另一个类的最佳方法

时间:2014-07-12 05:51:32

标签: java gwt design-patterns

如果两个类都处于同一级别(两者都是子类),那么如何将一个类的实例用于另一个类。在不传递给构造函数的情况下,将一个类的实例用于另一个类的最佳方法是什么? / strong>所以手动要求传递null。如何制作独立代码?

    Class PreviewPanel{

    private PreviewPanel(Builder builder) {
        this.previewMode=builder.previewMode;

        formsPreview=new NTFormsPreview(previewMode);
        formsPreview.setCanAddComment(builder.canAddComment);

        ntPreviewTreePanel=new NTPreviewTreePanel(builder,formsPreview);
    //This class have some event bus implemented.Sometime There, formsPreview instance is require.

           }
    public static class Builder {
        private PreviewMode previewMode;

        private Document document;
        public Builder(PreviewMode previewMode,Document document) {
            this.previewMode = previewMode;
            this.document=document;
        }
        public PreviewPanel build() {
              return new PreviewPanel(this);
        }

     }
}

如果我将该实例传递给构造函数,我必须遵循内部类的链并传递相同的实例以达到特定的类。我想避免它。这是一个很大的产品。要显示其中有多少类来实现实际的处理程序实现并不容易。

代码结构:

private PreviewPanel(Builder builder)
    ->formsPreview=new NTFormsPreview(previewMode);

        ->NTPreviewTreePanel(builder,formsPreview);
                 ->NTPreviewTree(document, bidDocuments, previewMode, canAddComment,canViewComment, previewFormTxnEncryptionDetails,formsPreview);
             ->NTTreeNode(formsPreview)
                private void fireReportItemClicked(Document document,esenderCSReport){
                                eventBus.fireEventFromSource(formPreviewEvent, formsPreview);   
                }

2 个答案:

答案 0 :(得分:1)

  

有没有办法将一个类的实例用于另一个类而不将实例传递给构造函数?

还有其他方法。

  • 使用setter方法将第二个类的实例传递给第一个类。
  • 通过分配第一个类中的实例变量,将第二个类的实例传递给第一个类。
  • 在第一个类中创建第二个类的实例。

如果您的回答与您的示例更相关,则需要更清楚地解释您在此处尝试做什么,以及为什么您认为当前的解决方案不能令人满意。


重新尝试解释:

  

我必须遵循内部类的链并传递相同的实例才能到达特定的类。我想避免它。

我不知道你想说什么。我怀疑其他读者有同样的问题。

我怀疑这里的真正问题在于您现有代码的设计。看起来你/某人对嵌套课有点疯狂,而且你正在遭受后果。可能是简化事物的唯一方法是取消嵌套或重新考虑构造函数。 (为什么私有构造函数需要" builder"参数?)


复杂的OO软件具有固有复杂的初始化模式是一种相当普遍的现象。往往没有简洁的方法来处理这个,但你通常可以通过使用某种"依赖注入"来避免这种情况。 (DI)机制。另一个名字是" Inversion of Control" (IOC)。

例如,Spring DI的工作原理是为您的类添加注释,并让Spring以所需的形式创建和组装实例。或者,您可以指定实例(bean)在XML中的组装方式。

这可能是你的解决方案......

答案 1 :(得分:1)

我的问题不明确,但我认为你可以做到以下几点:

创建一个新的类,它将“拥有你的两个子类 - 组合”

使其成为中介模式,以便可以按照您想要的规则/逻辑在另一个上使用和调用内容。

  1. 无需以任何方式将孩子中的一个传给另一个孩子。
  2. 自由地重新设计交互逻辑,如果它能够改变
  3. 无需“更改”“已有的结构”
  4. 仅供参考这个构建器似乎与Builder Pattern有关,你可能想阅读它,看看你能不能理解你的项目。