해당 포스트는 "자바 객체지향 디자인 패턴", "JAVA 언어로 배우는 디자인 패턴 입문" 책의 내용을 요약한 것이다.
※ 책임 연쇄/사슬 패턴
: 어떤 명령을 받았을 때 각각의 처리 객체에서 처리할 수 있으면 처리하고, 처리할 수 없으면 다음 처리 객체로 넘기는 패턴이다. 처리 객체들은 서로 사슬처럼 연결되어 있어 먼저 처리하는 객체에서 처리할 수 없으면 다음에 연결된 처리객체로 명령을 넘긴다.(링크드 리스트와 비슷하다)
ex) error에 대해 로그를 출력해주는 예제
public class Error{ private int errNum; public Error(int errNum){ this.errNum = errNum; } public int getErrNum(){ return errNum; } public String toString(){ return "[Error " + errNum + " ]"; } } public abstract class Logger{ private int errNum; private String errStr; private Logger next; public Logger(int errNum, String errStr){ this.errNum = errNum; this.errStr = errStr; } public Logger setNext(Logger next){ this.next = next; return next; } public int getErrNum(){ return errNum; } //해당 메서드에서 에러를 처리해준다. 체인구조로 되어 있다. public boolean log(Error error){ if(process(error)){ return true; }else if(next != null){ return next.log(error); } return false; } //실제 에러 처리에 관한 로그를 생성해주는 메서드 protected abstract boolean process(Error error); public String toString(){ return "Error Name is " + errStr; } }
class StdoutLogger extends Logger{ public StdoutLogger(int errNum){ super(errNum, "Stdout"); } protected boolean process(Error error){ if(this.getErrNum() == error.getErrNum(){ System.out.prinltn(error.toString() + this); return true; } return false; } } class StdinLogger extends Logger{ public StdinLogger(int errNum){ super(errNum, "Stdout"); } protected boolean process(Error error){ if(this.getErrNum() == error.getErrNum(){ System.out.prinltn(error.toString() + this); return true; } return false; } }
public class Main{ public static void main(String[] args){ Error error1 = new Error(1); Error error2 = new Error(2); Logger logger = new StdoutLoggger(1); logger.setNext(new StdinLogger(2)); logger.log(error1); logger.log(error2); } }
'자바 > 디자인패턴' 카테고리의 다른 글
스트래티지(Strategy, 전략) 패턴 (0) | 2017.07.01 |
---|---|
디자인 패턴 (0) | 2017.06.29 |
생성자의 인자가 많을 시 빌더 패턴 (0) | 2017.06.08 |
플라이웨이트 패턴 (0) | 2017.06.08 |
퍼사드 패턴 (0) | 2017.06.08 |