Заводская модель

Предположим, что есть фабрика, как показано ниже. Я хотел бы знать, возможно ли не включать 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();
    }
};
Другие вопросы по тегам