我有一系列或多或少做同样事情的课程。来自Java世界我将它们分组在父类下,并使用抽象工厂模式来共享公共代码并为我的类提供单点创建。因此,所有类都继承自DocumentParser,后者只有纯虚方法和静态方法,可以创建执行实际工作的类的实例,例如PDFParser。
DocumentParser的每个实现只能在一种类型的文档上工作,如果启发式失败,构造函数将抛出异常。
但是现在我想添加一种新的工厂方法,它将执行这些启发式方法并根据需要创建正确类型的类的实例。我的问题是,如果我收到的文件与现有的解析器不匹配,该怎么办?我的工厂退货是nullptr
吗?
答案 0 :(得分:2)
你可以在C ++中抛出异常,这很好!
答案 1 :(得分:1)
它主要取决于整个代码的构造。在询问社区之前,您应该问您自己:
当用户尝试打开文件时我想做什么,我的应用无法处理?
根据答案,您可以执行以下操作之一:
nullptr
,然后让代码通知用户异常,或测试nullptr
并显示您自己的信息提示无论你选择什么 - 不要盲目追逐设计模式。代码应该清晰,合乎逻辑,而不是面向模式。