Заводская модель
Предположим, что есть фабрика, как показано ниже. Я хотел бы знать, возможно ли не включать ObjectA.h и ObjectB.h.
структура каталогов
завод
| ----- Objecta
| ----- ObjectB
Поскольку я не хочу включать заголовочный файл в подкаталог, есть ли способ сделать это? И если есть новый объект C, ему не нужно изменять фабричный класс. он автоматически создаст ObjectC, если тип "TypeC".
#include "ObjectA.h"
#include "ObjectB.h"
object* create(const string& type)
{
if (type == "typeA")
{
return new ObjectA();
}
else
{
return new ObjectB();
}
};
1 ответ
Решение
Да, отделите реализацию от файла реализации и включите туда только файлы, предоставив в заголовке только прототип функции.
На самом деле позвонить new ObjectA();
а также new ObjectB();
Вы должны включить определения в вызывающем сайте.
//factory.h
object* create(const string& type);
//factory.cpp
#include "factory.h"
#include "ObjectA.h"
#include "ObjectB.h"
object* create(const string& type)
{
if (type == "typeA")
{
return new ObjectA();
}
else
{
return new ObjectB();
}
};