【问题标题】:Not sure how to approach this pattern in C++不知道如何在 C++ 中处理这种模式
【发布时间】:2014-05-26 13:13:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ design-patterns null factory


    【解决方案1】:

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

    【讨论】:

    • 有时答案会直接让您眼前一亮。从问题开始。
    【解决方案2】:

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

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

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

    • 如果答案是“用户足够聪明知道”,那么只需返回一个nullptr,并让代码通知用户异常,或者测试nullptr并显示您自己的信息提示,
    • 如果答案是“这会发生很多”,那么您可能希望返回一些抽象阅读器,该阅读器将能够通过忽略内容并返回一个空文件来读取任何文件,
    • 如果要将代码制作成某种库,最好只抛出异常

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

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 2015-11-21
      • 2021-09-18
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多