不知道如何在C ++中使用这种模式

时间:2014-05-26 13:13:41

标签: c++ design-patterns null factory

我有一系列或多或少做同样事情的课程。来自Java世界我将它们分组在父类下,并使用抽象工厂模式来共享公共代码并为我的类提供单点创建。因此,所有类都继承自DocumentParser,后者只有纯虚方法和静态方法,可以创建执行实际工作的类的实例,例如PDFParser。

DocumentParser的每个实现只能在一种类型的文档上工作,如果启发式失败,构造函数将抛出异常。

但是现在我想添加一种新的工厂方法,它将执行这些启发式方法并根据需要创建正确类型的类的实例。我的问题是,如果我收到的文件与现有的解析器不匹配,该怎么办?我的工厂退货是nullptr吗?

2 个答案:

答案 0 :(得分:2)

你可以在C ++中抛出异常,这很好!

答案 1 :(得分:1)

它主要取决于整个代码的构造。在询问社区之前,您应该问您自己

  

当用户尝试打开文件时我想做什么,我的应用无法处理?

根据答案,您可以执行以下操作之一:

  • 如果答案是"用户足够聪明地知道",那么只需返回nullptr,然后让代码通知用户异常,或测试nullptr并显示您自己的信息提示
  • 如果答案是"那将会发生很多事情,那么你可能想要返回一些能够通过忽略内容而阅读任何文件的抽象阅读器返回一个空文件,
  • 如果代码将被创建为某种类型的库,则最好只抛出异常

无论你选择什么 - 不要盲目追逐设计模式。代码应该清晰,合乎逻辑,而不是面向模式。