不确定如何在c++中实现此模式

Not sure how to approach this pattern in C++

本文关键字:实现 模式 c++ 不确定      更新时间:2023-10-16

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

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

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

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

这主要取决于您的代码的整体结构。在问社区之前,你应该问一下你自己:

当用户试图打开一个文件时,我的应用程序无法处理,我该怎么办?

根据答案,你可以做以下其中一件事:

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

无论你选择什么——不要盲目地追求设计模式。代码应该是清晰和逻辑的,而不是面向模式的。