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

Oop 如何根据类型更改对象显示?,oop,Oop,我原以为我对便便没问题,但现在我对以下几点感到困惑 基本模型 例如,假设您已经创建了扩展抽象类Animal的Dog和Cat对象 抽象动物具有通用属性: 颜色:字符串 腿数 Cat-extends-Animal具有额外属性: 人类宽容:数字 Dog extends Animal具有额外属性: BallsRetrieve:编号 问题 现在,我想以一种通用的方式显示应用程序中所有动物的列表。简单地说,应用程序只需从数据库中提取所有动物对象,将它们放入一个漂亮的列表,每个对象都用其适当的

我原以为我对便便没问题,但现在我对以下几点感到困惑


基本模型 例如,假设您已经创建了扩展抽象类
Animal
Dog
Cat
对象

抽象动物
具有通用属性:

  • 颜色:字符串
  • 腿数
Cat-extends-Animal
具有额外属性:

  • 人类宽容:数字
Dog extends Animal
具有额外属性:

  • BallsRetrieve:编号

问题 现在,我想以一种通用的方式显示应用程序中所有动物的列表。简单地说,应用程序只需从数据库中提取所有动物对象,将它们放入一个漂亮的
列表
,每个对象都用其适当的类实例化

但是现在,当我单击一个给定的动物时,我希望能够显示
动物的
通用属性和特定于其类型的属性

例如,如果所选动物是猫,我希望UI显示通用动物属性
颜色
,但我还希望显示猫属性
人类耐受性
。同样的情况也适用于带
ballsRetrieved
的狗


问题:
我应该使用经常被称为臭名昭著的
instanceof
/
typeof
来实现这一点吗?如何使UI根据对象的类型显示各种元素?

使用虚拟方法或。

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

类狗{
...
公共显示():void{
...
}
}

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

好的,这看起来是一个很好的答案,在Java中也适用。问题是这个模式依赖于方法重载,我正在使用Typescript。也许我需要以Angular社区为目标。@AdrienBrunelat有什么区别?模式通常是语言的狂热。好吧,当我说它依赖于重载时,我错了,我现在更了解这个模式了。我正在试这个。谢谢。使用访问者模式工作得很好,但它会给应用程序增加很多复杂性。我希望我能找到另一种方法…是的,但是web应用程序中的显示是通过属性绑定来实现的,就像JSF中的
${object.prop}
或者Angle中的
{object.prop}
一样。但话说回来,也许我的问题更多的是关于特定的网络案例,而不是《公安条例》。我需要再挖一点。