如何根据类型更改对象显示?

时间:2017-06-01 16:12:54

标签: oop

我虽然对POO很满意,但现在我和以下人员都感到困惑。

基本型号

例如,我们假设您已创建了扩展抽象类Dog的{​​{1}}和Cat个对象。

Animal具有通用属性:

  • color:string
  • leg:number

abstract Animal有额外的属性:

  • humanTolerance:number

Cat extends Animal有额外的属性:

  • ballsRetrieved:数字

问题

现在,我希望以通用的方式显示应用程序中所有动物的列表。很简单,应用程序只是从数据库中提取所有Animal对象,将它们放在一个很好的Dog extends Animal中,每个对象都用适当的类实例化。

但现在,当我点击一只给定的动物时,我希望能够显示List<Animal>通用属性和特定于其类型的属性。

例如,如果所选动物是猫,我希望UI显示通用动物属性Animalcolor,但我还想显示cat属性legs 。同样适用于humansTolerance的狗。

问题

我是否应该使用经常被称为臭名昭着的ballsRetrieved / instanceof来做到这一点?如何根据对象的类型使UI显示各种元素?

2 个答案:

答案 0 :(得分:0)

使用虚拟方法或Visitor Pattern

答案 1 :(得分:0)

明显的面向对象方法是在对象中使用display()方法。每个“类”都会显示出来:

class Dog {
    ...
    public display(): void {
        ...
    }
}

我不知道TypeScript中的“习惯”是什么,但面向对象的方法会隐藏属性,而是提供行为。