gpt4 book ai didi

c++ - 在这种情况下谁应该构建对象?

转载 作者:行者123 更新时间:2023-11-30 03:09:34 25 4
gpt4 key购买 nike

我有以下类(class):

class PluginLoader
{
public:
PluginLoader(Logger&, PluginFactory&, ConflictResolver&);
//Functions.
private:
//Members and functions
};

LoggerPluginFactoryConflictResolver 类都是将在应用程序中实现的接口(interface)类。我在主程序的顶层创建了单个 PluginLoader 对象。 Logger 可以在那个级别被知道。但是,PluginFactoryConflictResolver 仅在 PluginLoader 类内部使用。所以在顶层创建他们的对象看起来很丑陋。我应该怎么办?如果需要,我可以更改构造函数,但我想保持原样。欢迎任何意见。谢谢。

最佳答案

从您的问题和评论来看,您似乎对两个看似相互冲突的设计原则感到困惑。

  • 你应该尽可能封装
  • 您不应在实现中硬连接所需对象的创建。

在您的情况下,您通过遵守第二个原则(至少从可见界面来看)做对了。这是依赖注入(inject)的一个很好的例子。很高兴从创建 PluginFactory 和 ConflictResolver 的责任中重温 PluginLoader。

现在,您认为您违反了第一个原则,这在某种程度上是正确的。因此,返回并更仔细地重新审视您的设计问题。

PluginLoader 究竟需要什么?它只需要引用一些 PluginFactory 和ConflictResolver 对象。但它不需要自己创建它们。如何解决这个问题?

我能想到的有两种方式:

  • 有另一个抽象级别,如 builder pattern 中所做的那样.这里复杂的(或者在你的情况下显然复杂)建筑和布线过程被移动到构建器对象。主程序不是为如何做到这一点而烦恼。它只是触发建筑过程。
  • 有另一个工厂可以创建辅助对象,例如PluginFactory 和 ConflictResolver 并让 PluginLoader 只知道关于这个新工厂的界面。主程序可以创建该工厂的具体实例并传递给 PluginBuilder。

通过使用上述任何一种方式,您都可以消除与原则 2 的冲突。

祝一切顺利

关于c++ - 在这种情况下谁应该构建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com