使用列舉的空物件 Java
給定一個介面:
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
}
因為 null 物件沒有狀態,所以對它使用列舉單例是有意義的,所以給定一個像這樣實現的 null 物件:
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);
}