c++实现扩展工厂类

基类
renader.h
#pragma once
#include
#include
using namespace std;
class IRenderer // 抽象基类, I作为前缀表明这是一个接口类
{
public:
virtual ~IRenderer() {}
virtual bool LoadScene(const string& filename) = 0; // 加载场景
virtual void SetViewportSize(int w, int h) = 0; // 设置视角大小
virtual void SetCameraPosition(double x, double y, double z) = 0; // 设置相机位置
virtual void SetLookAt(double x, double y, double z) = 0; // 设置视点
virtual void Render() = 0;
};

注册器RendererFactory.h
class RendererFactory
{
public:
typedef IRenderer*(CreateCallback)();
static void RegisterRenderer(const std::string& type, CreateCallback cb)//注册
{
renderers_[type] = cb;
};
static void UnregisterRenderer(const std::string& type)//删除
{
renderers_.erase(type);
};
static IRenderer
CreateRenderer(const std::string& type)
{

	CallbackMap::iterator it = renderers_.find(type);
	if (it != renderers_.end()) {
		// 调用回调以构造此派生类的对象
		return (it->second)();
	}
	return NULL;
}

private:
typedef std::map<std::string, CreateCallback> CallbackMap;
static CallbackMap renderers_;
};
派生类UserRenderer .h
class UserRenderer : public IRenderer
{

public:
bool LoadScene(const std::string& filename) { return true; }
void SetViewportSize(int w, int h) {}
void SetCameraPosition(double x, double y, double z) {}
void SetLookAt() {}
void Render() { std::cout << “User Render” << std::endl; }
static IRenderer* Create()
{ return new Use
rRenderer(); } // 每个自定义renderer必须定义一个Create成员方法, 以向RendererFactory注册该创建自身对象的方法
};

使用
int main()
{
RendererFactory::RegisterRenderer(“User”, UserRenderer::Create)//注册
IRenderer p== RendererFactory::CreateRenderer(“user”);
p->Render();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抽象工厂模式是一种创建型设计模式,其主要目的是提供一个接口,用于创建一系列相关或相互依赖对象,而无需指定其具体。 在 C++ 中,实现抽象工厂模式需要以下步骤: 1. 定义抽象工厂,该包含一组纯虚函数,用于创建一系列相关对象。例如: ``` class AbstractFactory { public: virtual AbstractProductA* createProductA() = 0; virtual AbstractProductB* createProductB() = 0; }; ``` 2. 定义具体工厂实现抽象工厂中的虚函数,用于创建具体对象。例如: ``` class ConcreteFactory1 : public AbstractFactory { public: AbstractProductA* createProductA() { return new ConcreteProductA1(); } AbstractProductB* createProductB() { return new ConcreteProductB1(); } }; class ConcreteFactory2 : public AbstractFactory { public: AbstractProductA* createProductA() { return new ConcreteProductA2(); } AbstractProductB* createProductB() { return new ConcreteProductB2(); } }; ``` 3. 定义抽象产品,该包含一组纯虚函数,用于定义产品的接口。例如: ``` class AbstractProductA { public: virtual void operationA() = 0; }; class AbstractProductB { public: virtual void operationB() = 0; }; ``` 4. 定义具体产品实现抽象产品中的虚函数,用于定义具体产品。例如: ``` class ConcreteProductA1 : public AbstractProductA { public: void operationA() { // 具体实现 } }; class ConcreteProductA2 : public AbstractProductA { public: void operationA() { // 具体实现 } }; class ConcreteProductB1 : public AbstractProductB { public: void operationB() { // 具体实现 } }; class ConcreteProductB2 : public AbstractProductB { public: void operationB() { // 具体实现 } }; ``` 5. 在客户端代码中,使用抽象工厂创建对象。例如: ``` AbstractFactory* factory = new ConcreteFactory1(); AbstractProductA* productA = factory->createProductA(); AbstractProductB* productB = factory->createProductB(); productA->operationA(); productB->operationB(); delete productA; delete productB; delete factory; ``` 以上就是 C++ 实现抽象工厂模式的基本步骤。通过抽象工厂模式,我们可以将对象的创建和使用分离,从而提高代码的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值