ㅇ. 의도
메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다. 하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다.
ㅇ. 예제
logLevel의 값에 따라서 처리가능하면 로그를 쌓고 아니면 다른 객체에게 처리하라고 책임을 넘김
public class Client {
public static void main(String[] args) {
ALog info = new Info();
ALog warning = new Warning();
ALog debug = new Debug();
// 체인 형성
info.setLog(warning);
warning.setLog(debug);
info.writeLog(-100);
info.writeLog(1);
info.writeLog(2);
info.writeLog(3);
info.writeLog(100);
----------------------------------------------------------------
public abstract class ALog {
public ALog log = null;
public void setLog(ALog log) {
this.log = log;
}
abstract void writeLog(int logLevel);
----------------------------------------------------------------
public class Info extends ALog {
void writeLog(int logLevel) {
if(logLevel <= 1) {
System.out.println("info log");
} else {
if (super.log != null)
super.log.writeLog(logLevel);
}
}
----------------------------------------------------------------
public class Warning extends ALog {
void writeLog(int logLevel) {
if(logLevel == 2) {
System.out.println("warning log");
} else {
if (super.log != null)
super.log.writeLog(logLevel);
}
}
----------------------------------------------------------------
public class Debug extends ALog {
void writeLog(int logLevel) {
if (logLevel >= 3) {
System.out.println("debug log");
} else {
if (super.log != null)
super.log.writeLog(logLevel);
}
}