1

我有两种不同类型的发票,即一种用于消费者,另一种用于企业。我创建了一个“Invoice”抽象类,Consumer 和 Business 发票都继承自该类。消费者发票引用消费者实体,商业发票引用商业实体。

现在这很有效,但是当我在上下文类中有一组“发票”时,问题就出现了。(其中基本上包含消费者和企业发票)。我无法获得对“业务”对象或“消费者”对象的引用。(完全有道理......但我只是想知道我如何解决这个问题?我想这是一个很常见的场景?)

我是否只是在名为“GetInvoiceRecipient”的抽象类中创建一个返回“Recipient”对象的新方法?不过,此解决方案的唯一问题是现在我无法检索给定消费者或给定企业的发票?

4

2 回答 2

2

您可以只创建一个收件人接口并让“消费者”类和“业务”类实现它。

抽象发票将仅与收件人界面“对话”。

Recipient 接口将具有称为 getName、getEmail 或任何您需要的方法。您必须在 Consumer 和 Business 类中重新定义此方法。

这是一个简单的解决方案,但还有许多其他解决方案。

于 2013-10-31T10:41:19.547 回答
0

我倾向于在这种情况下使用管理类。也就是说,一个类包含一个包含一堆类的字典,它们可以是 Consumer、Business 或实现 IInvoice 接口的类。管理类可以有像 Add(IInvoice, key) 和 Lookup(key) 这样的公共方法作为 IInvoice

至于您的继承模型,您可能想要研究组合,因为它通常是一个更灵活的选择。什么是与面向对象设计相关的组合?虽然我确信只有两个子类并不重要。

于 2013-10-31T23:40:52.393 回答