我有一个用Java
实现的小型工厂类
。它的最小化版本如下所示:
interface MyClass{
public void doSomething();
}
class Concrete_1 implements MyClass{
private String field_1;
Concrete_1(String _field_1){
// ... initialization
}
public void doSomething(){
// ... not so important
}
}
class MyClassFactory{
public static MyClass init(int idx, String val){
Concrete_1 ex = null;
switch(idx){
case 1:
ex = new Concrete_1(val);
break;
default:
break;
}
return ex;
}
public static void main(String args[]){
MyClass ex = MyClassFactory.init(1, "value"); // <-- I like that
}
}
我喜欢它的工作方式,尤其是我如何实例化特定对象的方式,例如:
MyClass ex = MyClassFactory.init(1, "value");
现在我想要的是用 C++ 实现同样的事情。我看过一些示例(包括 stackoverflow 上的一些线程),但在所有这些示例中,它们都使用了抽象类(而不是我的 Java 中的接口(interface))。如果我没记错的话,就不可能创建抽象类的实例。所以,如果我们简单地将上面的代码移植到 C++ 并使用一些抽象类而不是接口(interface),它是行不通的,因为这是被禁止的:
MyClass ex = MyClassFactory.init(1, "value"); // <-- MyClass now is abstract
// so this is illegal
我的问题是如何在 C++ 中做完全相同的事情?谢谢!
最佳答案
在 C++ 中,它可以通过指针到达:
struct MyClass{
virtual void doSomething() = 0;
};
class Concrete_1 : public MyClass {
String field_1;
public:
Concrete_1(String _field_1){
// ... initialization
};
void doSomething(){
// ... not so important
}
};
class MyClassFactory{
public:
std::shared_ptr<MyClass> init(int idx, String val){
switch(idx){
case 1:
return std::shared_ptr<MyClass>(new Concrete_1(val));
}
return std::shared_ptr<MyClass>();
}
};
int main(...) {
std::shared_ptr<MyClass> ex = MyClassFactory::init(1, "value");
}
关于java - C++中的工厂模式。实例化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122962/