chain of responsibility

Pattern 2008. 8. 8. 18:41

. 의도

메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다. 하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다.

 

. 예제

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);

                  }

         }

Posted by 파이팅야
,