到目前为止,我从未认真考虑过使用工厂模式,因此如果这个问题似乎有点简单,我表示歉意:
在我看到的所有工厂模式示例中,我都只看到了没有参数化的非常简单的示例。例如,这里是一个从 Misko Hevery 的优秀文章《如何思考“new”运算符》中窃取的工厂:
class ApplicationBuilder { House build() { return new House(new Kitchen( new Sink(), new Dishwasher(), new Refrigerator()) ); } }然而,如果我想让我构建的每个房子都有一个名称,会发生什么情况?如果我按以下方式重写此代码,我仍在使用工厂模式吗?
class ApplicationBuilder { House build(const std::string & house_name) { return new House( house_name, new Kitchen(new Sink(), new Dishwasher(), new Refrigerator()) ); } }请注意,我的工厂方法调用已从:
ApplicationBuilder builder; House * my_house = builder.build();变为:
ApplicationBuilder builder; House * my_house = builder.build("Michaels-Treehouse");顺便说一句:我认为将对象实例化与业务逻辑分开的概念很棒,我只是试图弄清楚如何将它应用于自己的情况。令我困惑的是,我看到的所有工厂模式示例都没有将任何参数传递到 build() 函数中。
请明确:在实例化之前的那一刻,我不知道房子的名称。