Wie kann man sicherstellen, dass das Null Object ein Singleton ist?

Da das Null Object oft zustandslos ist, kann man es als Singleton implementieren, um Speicher zu sparen:

#include <iostream>
#include <memory>

// Abstrakte Basisklasse
class Logger {
public:
    virtual void log(const std::string& message) = 0;
    virtual ~Logger() = default;
};

// Konkrete Implementierung
class ConsoleLogger : public Logger {
public:
    void log(const std::string& message) override {
        std::cout << "Log: " << message << std::endl;
    }
};

// Null Object – Singleton
class NullLogger : public Logger {
public:
    void log(const std::string& message) override {
        // tut nichts
    }

    // Zugriff auf die Singleton-Instanz
    static NullLogger& instance() {
        static NullLogger instance;  // garantiert nur eine Instanz
        return instance;
    }

private:
    NullLogger() = default;
    ~NullLogger() = default;

    // Verhindern von Kopien und Zuweisungen
    NullLogger(const NullLogger&) = delete;
    NullLogger& operator=(const NullLogger&) = delete;
};

void process(Logger& logger) {
    logger.log("Verarbeite Daten...");
}

int main() {
    ConsoleLogger realLogger;
    process(realLogger);

    // Verwendung des Null Object Singletons
    process(NullLogger::instance());

    return 0;
}
com

Newsletter Anmeldung

Bleiben Sie informiert! Wir informieren Sie über alle neuen Beiträge (max. 1 Mail pro Woche – versprochen)