한글로 설명하는 것보다, 코드로 보면 더 간단하게 보실 수 있습니다.
예제에서의 핵심은 이 코드입니다..
/**
* 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' 카테고리의 다른 글
| Null Object Pattern (2) | 2009/09/17 |
|---|---|
| Specification Pattern (2) | 2009/09/16 |
| 디자인 패턴 그리고 그 이후.. (0) | 2009/09/16 |
| OOP에 대한 내용들.. (0) | 2009/07/06 |
| 단순 Reactor 패턴의 성능향상 방안.. (0) | 2009/06/25 |
트랙백 1개 | 댓글 2개
트랙백+댓글 | 트랙백 | 댓글
-
About Trackback
트랙백 기능을 이용하시면 이 밑부분에 당신의 글을 댓글처럼 달아놓으실 수 있습니다. 이 글의 트랙백 주소는 http://www.sjava.net/trackback/134
입니다. -
Trackback from 딱딱하고 재미없게 살아가기
Introduce Null Object http://www.javajigi.net/display/SWD/Introduce+Null+Object Introduce Null Object http://sourcemaking.com/refactoring/introduce-null-object 종종 유용하게 쓰는 리팩터링 가운데 하나가 바로 Introduce Null Object 리팩터링이다. 이미 다들 알고 있다시피 Introduce Null Object../ 2009/09/17 18:51 / delete
-
Comment by
decoder at 2009/09/17 18:51 / Permalink / Reply / Modify/Delete본문과 약간 핀트는 어긋나지만 Null Object와 관련된 글을 쓴적이 있어 트랙백 날려봅니다. ^^
-
Reply by
mcsong at 2009/09/17 21:16 / Permalink / Modify/Delete댓글 감사합니다.
decoder님의 글에서도 좋은 영감을 얻고 있습니다. ^^
-
-
Write your comment







null-object.zip
이올린에 북마크하기
이올린에 추천하기
















