因此,我正在努力改进现有的实现。我有许多多态类,它们都被组合成一个更高级别的容器类。我目前正在处理的问题是,更高级别的容器类,嗯,很糟糕。它看起来像这样,我真的没有问题(因为容器中的多态类应该是公共的)。我真正的问题是构造器...
/*
* 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(...));
}我真正需要的是让这个容器类更具可重用性。通过对成员对象进行硬编码并实例化它们,它基本上不是并且只能使用一次。工厂是构建我所需要的东西的一种方法(可能是通过提供要创建的对象及其特定类型的列表?)解决这个问题的其他方法?似乎应该有人之前就解决了..。谢谢!
发布于 2010-03-11 12:04:58
Dependency injection突然浮现在脑海中。
发布于 2010-03-11 12:59:41
如果在派生类中更改了创建的类型,即容器的子代使用class1和class2的不同子代,则可以使用工厂方法。
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。
Container::Container(aclass1, aclass2)
{
class1.reset(aclass1);
class2.reset(aclass2);
}发布于 2010-03-11 13:07:14
你知道你可以只有第二个构造函数来做不到这一点,对吧?
Container::Container(some params)
{
// any other initialization you need to do
}然后,您可以随意设置class1和class2,因为它们是公开的。
当然不应该这样,但是给出这段代码,这就是您可以做的。
据我所知,从您所描述的情况来看,工厂模式不会有太大帮助。
https://stackoverflow.com/questions/2422431
复制相似问题