假设我们有一个抽象工厂的实现,调用如下:
std::string ObjectName = "An Object Name";
std::string Args = "Argument passed directly to constructor by the factory";
std::unique_ptr<MyBaseClass> MyPtr(ObjectFactory::Instance().Construct(ObjectName,Args));
Run Code Online (Sandbox Code Playgroud)
工厂使用std::map转"An Object Name"成一个构造函数,它本身需要一个std::string作为参数.这个想法是用户比我更了解构造的对象,所以我应该放弃并让用户将他们想要的任何信息传递给构造函数.
这Args恰好是预期的形式,但我不知道处理duff输入的最惯用的方式.如果用户提供无效的参数字符串会发生什么?
我能想到以下几点:
bool Validate(std::string x)方法,该方法检查是否x是有效的参数字符串bool成员变量,如果为true,则表示"此对象不处于理智状态"抛出一个例外.您正在构建一个对象(虽然方式不同于此new),但失败是一个异常,如果可能发生则需要处理.
"解决方案2"与处理此问题无关,更多的是如何确定错误的输入.为此,它可以是一个可接受的解决方案,但它再次与手头的问题无关.
解决方案3在物体出现故障时使物体处于不确定状态,这是不可接受的.
解决方案4是另一种方法,如果您没有使用您的语言提供异常支持,这是唯一的方法,但我们这样做.在我看来,这种情况下的例外情况严格更好,因为未能构造一个对象是一个非常具有破坏性的行为,它应该需要替代代码或程序来消亡.
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |