【问题标题】:Combine Inheritance and Composition - Design Pattern结合继承和组合 - 设计模式
【发布时间】:2018-10-25 10:15:50
【问题描述】:

抱歉标题不清楚。 我有以下情况:

我有 4 种类型:Type1、Type2、Type3、Type4。 (具有相同的结构:namechildren

我还有其他 4 种类型的孩子:Child1、Child2、Child3、Child4。(它们又具有相同的结构:parentvalue em>)。

条件:Type1 只能有以下类型的子项:Child1; Type2->child2 等等。

如果我在这种情况下使用继承:所有类型都继承自 SuperType,所有子类型都继承自 Children。

public class Children {

}

public class SuperType {
    private List<Children> children;
}

public class Type1 extends SuperType {

}

public class Child1 extends Children {

}

Type1 可以有 Child2、Child3、Child4 的子代。这不是我想要的。

您对我可以用于这种情况的图案设计有任何想法吗?

【问题讨论】:

  • 父类应该/不影响它可以扩展的类。父类甚至不应该知道存在(ny)子类
  • @Stultuske:你认为这种情况下的继承不是一个合适的方法吗?
  • 你说:Type1 可以有孩子......这指向组合,而不是继承。组合是HAS A关系,继承是IS A关系
  • 没错。但是所有类型都是相同的结构,所有的孩子都是相同的结构。这就是我想使用继承方法的原因。
  • 老师和学生也是同一个结构,但是老师有学生,学生有老师。学生不等于老师

标签: java design-patterns


【解决方案1】:

您可以通过将SuperType 设为泛型并为Children 使用类型参数来解决它:

public class SuperType<T extends Children> {
    private List<T> children;
}

然后子类会指定自己的Children类型:

public class Type1 extends SupperType<Child1>{}
public class Type2 extends SupperType<Child2>{}

然后你要做的就是让SuperType的API使用类型参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2012-08-10
    • 1970-01-01
    • 2020-07-07
    • 2012-01-30
    • 2019-07-20
    • 2011-01-19
    相关资源
    最近更新 更多