我有两种不同类型的发票,一种用于消费者,另一种用于商业。我创建了一个“发票”抽象类,消费者和商业发票都继承自。消费者发票引用消费者实体,商业发票引用商业实体。
现在这完全有效但是当我在上下文类中有一组“发票”时会出现问题。 (主要包含消费者和商业发票)。我无法获得对“Business”对象或“Consumer”对象的引用。 (做得很完美......但我只是想知道如何解决这个问题?我想这是一个非常常见的情况?)
我是否只在名为“GetInvoiceRecipient”的抽象类中创建一个返回“收件人”对象的新方法?这个解决方案的唯一问题是现在我无法检索给定消费者或给定企业的发票?
答案 0 :(得分:2)
您可以创建一个收件人界面,让“Consumer”类和“Business”类实现它。
抽象发票只会与“收件人”界面“对话”。
Recipient接口将包含名为getName,getEmail或任何您需要的方法。您必须在Consumer和Business类中重新定义此方法。
这是一个简单的解决方案,但还有很多其他解决方案。
答案 1 :(得分:0)
我倾向于使用此方案的管理类。也就是说,一个类包含一个包含一堆类的字典,可以是Consumer,Business,也可以是实现接口IInvoice的类。管理类可以使用Add(IInvoice,key)和Lookup(key)等公共方法作为IInvoice
至于您的继承模型,您可能希望查看组合,因为它通常是一个更灵活的选项。 What is composition as it relates to object oriented design?虽然我确定只有两个子类并不重要。