首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“工厂”方法是正确的模式吗?

“工厂”方法是正确的模式吗?
EN

Stack Overflow用户
提问于 2010-03-11 11:56:46
回答 6查看 546关注 0票数 1

因此,我正在努力改进现有的实现。我有许多多态类,它们都被组合成一个更高级别的容器类。我目前正在处理的问题是,更高级别的容器类,嗯,很糟糕。它看起来像这样,我真的没有问题(因为容器中的多态类应该是公共的)。我真正的问题是构造器...

代码语言:javascript
复制
/*
 * class1 and class 2 derive from the same superclass
 */
class Container 
{
  public: 
   boost::shared_ptr<ComposedClass1> class1;  
   boost::shared_ptr<ComposedClass2> class2;
  private:
   ...
}

/*
 * Constructor - builds the objects that we need in this container. 
 */ 
Container::Container(some params)
{
  class1.reset(new ComposedClass1(...));
  class2.reset(new ComposedClass2(...));
}

我真正需要的是让这个容器类更具可重用性。通过对成员对象进行硬编码并实例化它们,它基本上不是并且只能使用一次。工厂是构建我所需要的东西的一种方法(可能是通过提供要创建的对象及其特定类型的列表?)解决这个问题的其他方法?似乎应该有人之前就解决了..。谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-11 12:04:58

Dependency injection突然浮现在脑海中。

票数 3
EN

Stack Overflow用户

发布于 2010-03-11 12:59:41

如果在派生类中更改了创建的类型,即容器的子代使用class1和class2的不同子代,则可以使用工厂方法。

代码语言:javascript
复制
class1* Container::GetClass1; virtual;
{
  return new ComposedClass1;
}

class1* SpecialContainer::GetClass1;
{
  return new SpecialComposedClass1;
}

Container::Container(some params)
{
  class1.reset(GetClass1);
  class2.reset(GetClass2);
}

另一种方法是将Container依赖项的创建与Container解耦。对于初学者,您可以将构造函数更改为依赖注入class1和class2。

代码语言:javascript
复制
Container::Container(aclass1, aclass2)
{
  class1.reset(aclass1);
  class2.reset(aclass2);
}
票数 0
EN

Stack Overflow用户

发布于 2010-03-11 13:07:14

你知道你可以只有第二个构造函数来做不到这一点,对吧?

代码语言:javascript
复制
Container::Container(some params)
{
    // any other initialization you need to do
}

然后,您可以随意设置class1和class2,因为它们是公开的。

当然不应该这样,但是给出这段代码,这就是您可以做的。

据我所知,从您所描述的情况来看,工厂模式不会有太大帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2422431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档