正确实现依赖注入的方法之一是将对象创建与业务逻辑分开。通常,这涉及使用工厂创建对象。
到目前为止,我从未认真考虑过使用工厂,所以如果这个问题看起来有点简单,我深表歉意:
在我遇到的所有工厂模式示例中,我总是看到没有参数化的非常简单的示例。例如,这是从Misko Hevery出色的How To Think About “new” Operator文章中偷来的 Factory。
类应用程序构建器{ 房屋建造(){ 返回新房子(新厨房( 新水槽(), 新洗碗机(), 新冰箱()) ); } }
但是,如果我希望我建造的每座房子都有一个名字,会发生什么?如果我按如下方式重写此代码,我是否仍在使用工厂模式?
类应用程序构建器{ 房屋建造(const std::string & house_name){ 返回新房子(房子名称, 新厨房(新水槽(), 新洗碗机(), 新冰箱()) ); } }
请注意,我的工厂方法调用已从这里更改:
应用程序构建器; 房子 * my_house = builder.build();
对此:
应用程序构建器; 房子 * my_house = builder.build("Michaels-Treehouse");
顺便说一句:我认为将对象实例化与业务逻辑分离的概念很棒,我只是想弄清楚如何将它应用于我自己的情况。让我感到困惑的是,我看到的所有工厂模式示例都没有将任何参数传递给 build() 函数。
需要明确的是:直到我需要实例化它之前,我才知道房子的名称。