#ifndef LOGGER_H
#define LOGGER_H
#include <iostream>
#include <string>
class Logger
{
public:
virtual void writeLog() = 0;
};
class DatabaseLogger : public Logger
{
public:
void writeLog() {
std::cout << "DatabaseLogger" << std::endl;
}
};
class FileLogger : public Logger
{
public:
void writeLog() {
std::cout << "FileLogger" << std::endl;
}
};
class LoggerFactory
{
public:
virtual Logger* createLogger() = 0;
};
class DatabaseLoggerFactory : public LoggerFactory
{
public:
Logger* createLogger() {
Logger* p = new DatabaseLogger;
return p;
}
};
class FileLoggerFactory : public LoggerFactory
{
public:
Logger* createLogger() {
Logger* p = new FileLogger;
return p;
}
};
#endif
#include "Logger.h"
void test()
{
LoggerFactory* pFileFactory = new FileLoggerFactory;
Logger *pFile = pFileFactory->createLogger();
pFile->writeLog();
LoggerFactory* pDatabaseFactory = new DatabaseLoggerFactory;
Logger *pDatabase = pDatabaseFactory->createLogger();
pDatabase->writeLog();
delete pFileFactory;
delete pFile;
delete pDatabaseFactory;
delete pDatabase;
}
int main()
{
test();
}
