避免组合模式java



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

如果A和B不能有一个公共基类,则不能将公共字段放在这样的类中。

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

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

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

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

例如

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;
     }
}

相关内容

  • 没有找到相关文章

最新更新