|
|
1
2
然而,考虑到你更一般的问题,即“我们如何处理 额外 我们不能或不允许通过基类以多态方式访问的行为,“例如,如果基类不在我们的控制之下,你的选项可能是选项3、访问者模式或辅助类。在这两种情况下,你都是在将多态性有效地外包给外部实体——在选项3中,UI(例如呈现者或控制器),它执行instanceOf检查,并根据是否是B执行不同的操作;在访问者或辅助者的情况下,是新类。以你的例子为例,访问者可能是矫枉过正的(而且,如果你不能/不愿意更改基类来适应它,我认为不可能实现它),所以我建议使用一个名为“renderer”的简单类:
这封装了运行时类型检查,并将代码捆绑到具有明确职责的合理定义良好的类中,而没有Visitor的概念开销。(不过,根据GrizzlyNyo的回答,如果你的层次结构或功能集比你在这里展示的更复杂,那么Visitor可能更合适,但许多人发现Visitor很难理解,我倾向于在简单的情况下避免使用它——但你的里程可能会有所不同。) |
|
|
2
1
|
|
|
3
0
这看起来像是访问者设计模式(也称为“双分派”)的教科书案例。 看 this answer 获取有关访问者和复合模式的详细解释的链接。 |
|
|
simply lemon · python上链表的添加方法 2 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 2 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 2 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 2 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 2 年前 |