如何在合成中设置子类的字段

时间:2019-06-06 20:28:54

标签: java composition

我想使用标准的setter在C类中设置文本,但不创建这样的新实例:

C c = new C();

c.setText("text")

B b = new B();

b.setC(c);

A a = new A();

a.setB(b);

接下来,我想以某种方法使用a的实例。

是否有其他最简单的解决方案可以在不使用构造函数的情况下做到这一点?

class A {  
 private B b;

// getter setter }

class B {  
 private C c; 

//getter setter }

class C {  
 private String text;

// getter seter }

1 个答案:

答案 0 :(得分:0)

我不确定您的意思。我的猜测是您想使用类A公开B和C的方法。如果是这种情况,您要做的就是包装它们的方法。

public class A {
    private B b;
    ...

    public A() {
      b = new B();
      ...
    }

    public void setCText(String text) {
      b.setCText(text);
    }
...
}

您要做的就是让B实例化C并遵循类A的相同模式。也就是说,这是完成此任务的一种好方法。

A可以由B(和其他部分)组成,B可以由C(和其他部分)组成。不行的是遍历组成的所有层次以更新整体的一部分。您需要使用其他设计模式来完成此任务。例如,您可以订阅C类以在发生某些更改时收到一些通知,并将其用作更新该类的text(字符串)字段的触发器。

同样,如果类A需要知道其部分内容何时更改,则可以使用其他模式。这个问题听起来可以使用Composite Design Pattern

来解决