c++ - 如何在工厂方法设计模式中返回子类的实例?
问题描述
经过对工厂方法设计的一些指导,一些研究和尝试理解代码示例。有几件事我仍然没有掌握。
我正在尝试制作一个图层系统,其中每个图层一次可以加载一个场景并让该场景可以更改。
为此,我创建了:
Layer
我所有场景都继承自的类- 应该可加载的可能场景类之一(
DLA
在此示例中调用)。
开始
类Layer
头文件 ( Layer.h
)
#pragma once
#ifndef _LAYER
#define _LAYER
enum SceneType{
Scene_None,
Scene_Default,
Scene_DLA,
Scene_Boids
};
class Layer
{
public:
void setup();
void update();
void draw();
void changeScene(SceneType Type);
static Layer *CreateScene(SceneType Type);
Layer* scene;
private:
};
#endif
类Layer
cpp 文件 ( Layer.cpp
)
#include "DLA.h"
#include "Layer.h"
void Layer::setup() {
// Start Scene
scene = CreateScene(Scene_DLA);
scene->setup(); // this causes the stack overflow
}
void Layer::update() {
//scene->update();
}
void Layer::draw() {
//scene->draw();
}
void Layer::changeScene(SceneType Type) {
if (scene) delete scene;
scene = CreateScene(Type);
}
Layer *Layer::CreateScene(SceneType Type)
{
switch (Type)
{
case Scene_None:
default:
return nullptr;
case Scene_DLA:
return new DLA();
}
}
以及场景类之一,DLA
类头文件(DLA.h
)
#include "Layer.h"
class DLA: public Layer
{
public:
DLA();
void setup();
void update();
void draw();
private:
};
#endif
我已经删除了所有不重要或与我当前问题无关的内容(GUI 设置、模拟内容等)
我认为我现在的问题是当我希望它返回所需模拟的类型(在这种特定情况下)时,我的返回类型CreateScene()
返回一个类型。Layer
DLA
我读过
工厂方法是类的静态方法,它返回该类类型的对象。但与构造函数不同,它返回的实际对象可能是子类的实例。
那么如何让它返回一个子类的实例呢?因为截至目前,当我simulation->setup();
在内部调用时,void Layer::setup()
出现堆栈溢出错误
谢谢
解决方案
推荐阅读
- javascript - 如何根据D3中的自定义Y轴绘制堆积条形图
- php - simplexml_load_string 抛出数组到字符串的转换错误
- python - “if”命令只运行一次,不重复
- javascript - URL.createObjectURL 在某些组件中起作用,而在其他组件中不起作用 ReacrJS
- python - 如何重写我的正则表达式以在出现单独模式时开始搜索?
- amazon-web-services - boto3 找不到配置文件
- docker - 在 AWS Fargate 上的 docker 内运行 docker
- jquery - 修复 Listview 中的控件 id
- sql - 带变量的多个连接
- python - Python从文件夹自动完成