在Composition模式java中避免冗余

时间:2015-06-24 07:32:56

标签: java oop inheritance design-patterns composition

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

2 个答案:

答案 0 :(得分:3)

如果A和B不具备共同的基类,则不能将公共字段放在这样的类中。

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

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

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

答案 1 :(得分:0)

正如您所说的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;
     }
}