gpt4 book ai didi

c# - 当责任不属于类时,使用多态而不是条件

转载 作者:行者123 更新时间:2023-11-30 22:22:37 24 4
gpt4 key购买 nike

我在开发一个非常简单的应用程序时遇到了一些问题,该应用程序是学校项目的一部分。

这是一个非常基本的基于控制台的员工管理系统,您可以在其中添加 4 种类型的员工(全职、兼职、契约(Contract)、季节性员工,所有员工都有几个不同的属性。)

我遇到的问题是在显示用于修改特定员工类型的菜单时。

在员工类型上做一个 switch 语句显然是非常糟糕的设计,但是为每个员工类添加“DisplayModificationMenu”以便它可以显示自己的菜单似乎也很糟糕,因为显示菜单似乎不是一个合适的职责对于员工对象本身。

解决此设计问题的最佳方法是什么?我考虑过创建一个 Menu 类并对每个菜单进行子类型化,这样每个菜单都可以显示自己,但即便如此,我觉得仍然会在某个地方切换类型来决定要实例化哪个菜单。

修改员工的工作流程是通过 ID 选择员工,然后应显示该员工类型的正确菜单。因此,即使使用子类型菜单,在知道要实例化哪个菜单之前,您似乎也必须检查员工类型。

提前感谢您的任何建议。

最佳答案

我认为对一个对象的类型进行切换不是问题,只要它被封装、记录和理解得当。

在您的情况下,您可以创建 DisplayMenuFactory,它将接受抽象员工对象并返回抽象菜单类。在内部,它将根据员工类型进行切换,并为每种类型返回具体的菜单类。而且,如果您最终拥有具有相同切换机制的不同工厂,您可以将它们合并在一起,并且这种切换将始终在单个类中发生。因此,为不同的员工创建不同的 UI 的责任将在这个类中。

第二个选项是让 Employee 类具有 GetMenu 方法,这将为每个员工类型返回具体的菜单类型。但这是混合模型和 UI,我认为在这种情况下这是 Not Acceptable 。

关于c# - 当责任不属于类时,使用多态而不是条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com