合成与泛型

时间:2018-10-06 07:51:39

标签: typescript generics composition

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我更喜欢第二个! 当您有两种方法和功能应应用于与类型无关的对象时,将使用泛型类。 否则,将类声明为泛型仅用于解决组合问题不是一个好设计!

答案 2 :(得分:0)

它们是同一件事,每个结果都是相同的。但是只有第一个是类型无关的。因此,长期使用1更有用。