खोज…


टिप्पणियों

नल ऑब्जेक्ट बिना संदर्भित मान के साथ या परिभाषित तटस्थ व्यवहार के साथ एक वस्तु है। इसका उद्देश्य अशक्त सूचक / संदर्भ जांच की आवश्यकता को दूर करना है।

अशक्त वस्तु पैटर्न (C ++)

एक अमूर्त वर्ग मानते हुए:

class ILogger {
    virtual ~ILogger() = default;
    virtual Log(const std::string&) = 0;
};

के बजाय

void doJob(ILogger* logger) {
    if (logger) {
         logger->Log("[doJob]:Step 1");
    }
    // ...
    if (logger) {
         logger->Log("[doJob]:Step 2");
    }
    // ...
    if (logger) {
         logger->Log("[doJob]:End");
    }
}

void doJobWithoutLogging()
{
    doJob(nullptr);
}

आप एक अशक्त वस्तु लकड़हारा बना सकते हैं:

class NullLogger : public ILogger
{
    void Log(const std::string&) override { /* Empty */ }
};

और फिर निम्नलिखित में doJob बदलें:

void doJob(ILogger& logger) {
    logger.Log("[doJob]:Step1");
    // ...
    logger.Log("[doJob]:Step 2");
    // ...
    logger.Log("[doJob]:End");
}

void doJobWithoutLogging()
{
    NullLogger logger;
    doJob(logger);
}

एनम का उपयोग करते हुए नल ऑब्जेक्ट जावा

एक इंटरफेस दिया:

public interface Logger {
   void log(String message);
}

उपयोग के बजाय:

public void doJob(Logger logger) {
    if (logger != null) {
       logger.log("[doJob]:Step 1");
    }
    // ...
    if (logger != null) {
       logger.log("[doJob]:Step 2");
    }
    // ...
    if (logger != null) {
       logger.log("[doJob]:Step 3");
    }
}

public void doJob() {
    doJob(null); // Without Logging
}

क्योंकि अशक्त वस्तुओं की कोई स्थिति नहीं होती है, इसलिए इसके लिए एक एनुम सिंगलटन का उपयोग करना समझ में आता है, इसलिए इस तरह लागू की गई एक अशक्त वस्तु दी गई है:

public enum NullLogger implements Logger {
    INSTANCE;

    @Override
    public void log(String message) {
        // Do nothing
    }
}

फिर आप अशक्त जांच से बच सकते हैं।

public void doJob(Logger logger) {
    logger.log("[doJob]:Step 1");
    // ...
    logger.log("[doJob]:Step 2");
    // ...
    logger.log("[doJob]:Step 3");
}

public void doJob() {
    doJob(NullLogger.INSTANCE);
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow