【问题标题】:Composition vs Generics组合与泛型
【发布时间】:2019-03-11 15:04:14
【问题描述】:

假设我有一个抽象类 A 和三个从它继承的具体类 A1、A2 和 A3。还有一个不同的层次结构树,有一个抽象类 B 和三个具体类 B1、B2 和 B3。每个具体类 A 需要分别保存 B 类的对象列表。这意味着,A1 拥有 B1 的列表。什么是更好的解决方案:

  1. 使 A 成为泛型类,并使其包含 T 的泛型列表,该列表扩展 B,例如:

    abstract class A<T extends B> {
        protected arr: Array<T extends B>
    }
    

    这样,我应该将每个 A 类声明如下:

       class A1 extends A<B1>
    
  2. 使用组合如下:

    class A1 extends A {
        private arr: Array<B1>
    }
    

【问题讨论】:

    标签: typescript generics composition


    【解决方案1】:

    如果我在不同的类中有很多类似的代码,我会更喜欢泛型。因此,如果您的类 A1, A2, A3 在功能上相似,只是在 type of B object 上有所不同,那么请使用泛型。除此之外,我没有充分理由想到使用泛型。如果上述原因不成立,请使用composition

    【讨论】:

      【解决方案2】:

      我更喜欢第二个! 当您有几个方法和功能应该应用于独立于其类型的对象时,将使用泛型类。 否则,将一个类声明为泛型只是为了解决组合问题不是一个好的设计!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-21
        • 2018-03-03
        • 1970-01-01
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多