避免组合模式中的冗余 java

Avoiding redundancy in Composition pattern java

我有两个 classA 和 B。现在,我有 B "has a" A 关系。因此,这里要遵循的最琐碎的事情是组合模式。现在,B 的字段之一是 A 的对象。问题是 A 和 B 的某些字段是公共的。因此,在这种情况下,这些字段将是多余的。我无法从公共字段创建抽象 class 并让 A 和 B 继承它,因为它们已经扩展了一些抽象 class。在这种情况下,最佳做法是什么?

如果A和B不能有共同的基础class,你不能把共同的字段放在这样的class中。

避免冗余的一种方法是创建第三个 class C,其中包含 A 和 B 的公共字段,并让 A 和 B 都拥有 class C 的成员。

只有当公共字段作为一个单独的 class 有意义时,这样的重构才有意义(即 class 将代表一些现实生活中的对象或概念,而不仅仅是一个任意组字段)。否则我会保留多余的字段。

例如,OfficePerson 可能没有共同的基数 class(Object 除外),但假设它们都有街道名称、城市、邮政编码等属性...您可以很容易地看到这些字段应该被提取到 Address class.

正如您所说,您的 A 和 B class 已经扩展了抽象 class,您可以尝试使用非公共函数委托公共字段来区分它

例如

class B extends AbstractB {
     private String myField;
     public String getMyField(){
           return myField;
     }
}

class A extends AbstractA {
     private String myField;
     private B b;
     public A(B b){
        this.b = b;
     }
     public String getMyField(){
           return myField;
     }
     public String getMyBField(){
           return b.myField;
     }
}