抽象工厂模式客户端代码
Abstract Factory Pattern Client Code
我正试图为abs工厂编写客户端代码,但我被客户端代码卡住了。我无法通过Factorymaker.getFactory("Bshell");
实例化任何Bshell。代码是在没有客户端代码的情况下编译的
(我是stackoverflow的新手。我的iostream在我的代码中是正常的。)
#include <iostream>
using namespace std;
//This is the abstract product.
class Shell {
public:
virtual void printShell(){ cout << "I am the abstract productn"; }
};
class Bshell : public Shell {
public:
Bshell();
Bshell(string arg){ cout << "I am " << arg << endl; }
void printShell(){ cout << "I am Bshelln"; }
};
class Cshell : public Shell {
public:
Cshell();
Cshell(string arg){ cout << "I am " << arg << endl; }
void printShell(){ cout << "I am Cshelln"; }
};
class Kshell : public Shell {
public:
Kshell();
Kshell(string arg){ cout << "I am " << arg << endl; }
void printShell(){ cout << "I am Kshelln"; }
};
//This is the abstract factory.
class ShellFactory {
public:
virtual Shell* createBshell();
virtual Shell* createCshell();
virtual Shell* createKshell();
};
//Concrete factories
class BShellFactory : public ShellFactory {
public:
Shell* createBshell(){ return new Bshell("Bshell"); }
};
class CShellFactory : public ShellFactory {
public:
Shell* createCshell(){ return new Cshell("Cshell"); }
};
class KShellFactory : public ShellFactory {
public:
Shell* createKshell(){ return new Kshell("Kshell"); }
};
//indirectly instantiating factories
class Factorymaker {
private:
ShellFactory *sf = NULL;
public:
ShellFactory* getFactory(string choice){
if (choice == "Bshell"){ sf = new BShellFactory(); }
else if (choice == "Cshell"){ sf = new CShellFactory(); }
else if (choice == "Kshell"){ sf = new KShellFactory(); }
return this->sf;
}
};
int main()
{
Factorymaker *fmaker = new Factorymaker();
ShellFactory *sf = fmaker.getFactory("Bshell");
Bshell bshellproduct = sf.createBshell();
return 0;
}
fmaker
和sf
是指针,因此使用->
而不是.
来访问它们的成员。
sf->createBshell()
的返回类型是Shell*
,因此应该是bshellproduct
的类型。
你的编译器应该告诉你所有这些。
相关文章:
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 为什么 JsonCpp http 客户端在 201 响应代码上失败?
- 客户端代码中的 Valgrind 钩子:特定函数的内存泄漏
- 如何使用 swagger-codegen cpprest 客户端库代码?
- 在 Ubuntu 上编译 Protobuf 客户端代码,但找不到包含文件
- 如何使用 Python 实验室机器作为我的C++客户端代码的服务器
- 将C 代码(本机客户端)移植到浏览器(Web应用程序)
- 当函数有很多参数和客户端代码只需更改其中时,如何处理情况就可以处理
- C++(不是 C)中的示例服务器/客户端代码
- 我的客户端服务器代码无法正常工作
- 应由库或客户端代码删除已加载库中的对象实例
- 基本服务器/客户端代码出现问题
- Qt服务器客户端代码
- 抽象工厂模式客户端代码
- 当服务器重新启动并且客户端收到WSAECONNRESET错误代码时,我应该重新创建整个套接字吗
- 将 c# asp.net Web 应用程序与C++ dll 链接时,是在服务器或客户端上运行的 dll 代码
- 如何使此代码适用于不同计算机上的服务器和客户端
- 使用Google Mock来模拟在客户端代码中复制的对象