java - C++中的工厂模式。实例化问题

标签 java c++

我有一个用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/

相关文章:

java - 如何使用 Java 将 session 限制为单个浏览器选项卡

java - 在多线程环境中设置对象字段

java - Android 中的 Log.e

c++ - 如何在 Visual C++ 中使用 Windows 窗体创建特定控件?

c++ - Xcode 5.1 std::string 连接在发布版本中的 iOS 5.1 设备上崩溃

c++ - 在 C++ 中使用循环遍历数组,程序显示 "exit status -1"?

java - 如何使用MyBatis将ResultSet中的值映射到pojo

java - Spring 中的异步事件需要大量时间来执行(轮到它了)

c++ - 如何通过另一个类将共享指针传递给一个类?

c++ - Torus 的纹理应用不正确