我正在尝试以正确的方式设计应用程序,它应该
我发现工厂模式很有用,所以根据我的关注准备了一个UML图。
每个InvoiceFactoryProvider
都可以生成PInvoice
或SInvoice
(特定于他们)。 CreatePInvoice()
和CreateSInvoice()
应调用load()
和save()
方法。
如何将load()
与SQLReader类耦合以将每一行作为PInvoice
对象? save()
使用我的IDataWriter
界面。你能提供一些例子/建议吗?
修改
在审查了Bridge Pattern的示例之后,正如Atul建议的那样,我使用它创建了这个问题的类图,如下所示:
Invoice
SQL查询可能会有所不同(应用程序可能会加载来自不同系统的发票数据 - PollosInvoice
或StarInvoice
)以及它们的处理方式(不同的实现方式)。
在这种情况下,我将抽象 - Invoice
从其实现中解耦 - 将发票导出到某些软件(AcmeExporter
或SigmaExporter
)。 AcmeExporter
和SigmaExport
将根据规格设置字段 - 交易日期,付款方式,发票类型等,取自Invoice的DataTable。 ExportInvoice()
将返回DataTable
所需的数据。 InvoiceExporter
也使用两个接口进行编码和文件格式化。
你怎么看?它有什么样的缺陷/优点?
答案 0 :(得分:1)
目前看起来您正在使用抽象工厂设计模式来创建产品(发票)。但需要注意的是,您的加载和保存方法都在产品(发票)内部,因此最好使用Bridge Design Pattern。您的产品将使用Reader and Writer的实现来加载和保存记录。
注意:即使使用此设计模式,您也可以使用AbstractFactory。
它看起来像下面......(只是一个类比)