【发布时间】:2008-12-02 09:02:24
【问题描述】:
在我的应用程序中,有 10-20 个类被实例化一次[*]。这是一个例子:
class SomeOtherManager;
class SomeManagerClass {
public:
SomeManagerClass(SomeOtherManager*);
virtual void someMethod1();
virtual void someMethod2();
};
类的实例包含在一个对象中:
class TheManager {
public:
virtual SomeManagerClass* someManagerClass() const;
virtual SomeOtherManager* someOtherManager() const;
/** More objects... up to 10-20 */
};
目前 TheManager 使用 new 操作符来创建对象。
我的意图是能够使用插件替换 SomeManagerClass (或任何其他类)实现与另一个。为了替换实现,需要两个步骤:
- 定义一个类 DerivedSomeManagerClass,继承 SomeManagerClass [插件]
- 创建新类 (DerivedSomeManagerClass) 而不是默认的 (SomeManagerClass) [应用程序]
我想我需要某种对象工厂,但它应该相当简单,因为总是只有一种类型可以创建(默认实现或用户实现)。
你知道如何设计一个像我刚才描述的那样简单的工厂吗?考虑到将来可能会有更多类,所以应该很容易扩展。
[*] 我不在乎它是否不止一次发生。
编辑:请注意,TheManager 中包含两个以上的对象。
【问题讨论】:
-
您想在运行时还是在设计时替换 SomeManagerClass 实例?
-
SomeManagerClass 只创建一次 - 在应用程序启动时,所以我想更改这个创建。但它应该在运行时,因为替换默认实现的代码驻留在动态链接的插件中。
-
FWIW,我认为任何时候你将一个类命名为“Manager”,这是因为你不知道它的真正作用。你也可以称它为“盒子”或“东西”。这个名字是一种气味,恕我直言。