한글로 설명하는 것보다, 코드로 보면 더 간단하게 보실 수 있습니다.
예제에서의 핵심은 이 코드입니다..
/**
* return logger
* @return
*/
public ILogger getLogger() {
if(this.logger == null)
return NullLogger.getInstance();
return this.logger;
}
아래는 로그를 남기는 예제코드입니다.
/**
*
* @author mcsong@gmail.com
* @since 2009. 9. 17.
*/
public interface ILogger {
/**
*
* @param log
*/
public void log(String log);
}
/**
*
* @author mcsong@gmail.com
* @since 2009. 9. 17.
*/
public class FileLogger implements ILogger {
@Override
public void log(String log) {
System.out.println("file log - " + log);
}
}
/**
*
* @author mcsong@gmail.com
* @since 2009. 9. 17.
*/
public class NullLogger implements ILogger {
/**
* singleton instance
*/
private static final NullLogger instance = new NullLogger();
/**
*
*/
private NullLogger() {
}
/**
* return singleton instance
* @return
*/
public static NullLogger getInstance() {
return NullLogger.instance;
}
@Override
public void log(String log) {
// TODO Auto-generated method stub
System.out.println("null log - " + log);
}
}
/**
*
* @author mcsong@gmail.com
* @since 2009. 9. 17.
*/
public class SocketLogger implements ILogger {
@Override
public void log(String log) {
// TODO Auto-generated method stub
System.out.println("socket log - " + log);
}
}
/**
*
* @author mcsong@gmail.com
* @since 2009. 9. 17.
*/
public class LoggerHandler {
/**
* type
*/
private ILogger logger;
/**
* constructor
* @param logger
*/
public LoggerHandler(ILogger logger) {
this.logger = logger;
}
/**
* return logger
* @return
*/
public ILogger getLogger() {
if(this.logger == null)
return NullLogger.getInstance();
return this.logger;
}
/**
*
* @param log
*/
public void log(String log) {
this.getLogger().log(log);
}
/**
*
* @param logger
* @param log
*/
public void log(ILogger logger, String log) {
this.logger = logger;
this.log(log);
}
}
import net.sjava.patterns.nullobject.SocketLogger;
import net.sjava.patterns.nullobject.LoggerHandler;
public class NullObjectTest {
/**
* handler
*/
private static LoggerHandler handler;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
handler = new LoggerHandler(null);
handler.log("fileloggger");
handler = new LoggerHandler(new FileLogger());
handler.log("socketloggger");
handler = new LoggerHandler(new SocketLogger());
handler.log("socketloggger");
}
}
null-object.zip |
'ooad' 카테고리의 다른 글
| OOP 설계 5원칙 (2) | 2010/07/19 |
|---|---|
| Singleton Pattern (0) | 2010/04/29 |
| Null Object Pattern (2) | 2009/09/17 |
| Specification Pattern (2) | 2009/09/16 |
| 디자인 패턴 그리고 그 이후.. (0) | 2009/09/16 |
null-object.zip