Chain of Responsibility 책임 전가 패턴
- 요청이 발생했을때, 첫번째 객체가 요청을 처리하지 못할 경우 다음 객체에게 요청을 전달한다.
- 요청이 처리될 때까지 고리를 따라 요청을 전달하는 패턴.
- abstract class Logger {
- public static int ERR = 3;
- public static int NOTICE = 5;
- public static int DEBUG = 7;
- protected int mask;
- protected Logger next;
- public void setNext(Logger log) {
- next = log;
- }
- public void message(String msg, int priority) {
- // 권한이 있으면 처리하고 메시지를 다음(next) 로거에게 넘긴다.
- if (priority <= mask) {
- writeMessage(msg);
- }
- if (next != null) {
- next.message(msg, priority);
- }
- }
- abstract protected void writeMessage(String msg);
- // private static final Logger INSTANCE = new Logger();
- public static Logger createChain() {
- Logger logger = new StdoutLogger(Logger.DEBUG);
- // 처리하지 못하면 다음으로 책임을 넘긴다.
- Logger logger1 = new EmailLogger(Logger.NOTICE);
- logger.setNext(logger1);
- Logger logger2 = new StderrLogger(Logger.ERR);
- logger1.setNext(logger2);
- return logger;
- }
- }
- class StdoutLogger extends Logger {
- public StdoutLogger(int mask) {
- this.mask = mask;
- }
- @Override
- protected void writeMessage(String msg) {
- System.out.println("Writing to stdout : " + msg);
- }
- }
- class EmailLogger extends Logger {
- public EmailLogger(int mask) {
- this.mask = mask;
- }
- @Override
- protected void writeMessage(String msg) {
- System.out.println("Sending to via email : " + msg);
- }
- }
- class StderrLogger extends Logger {
- public StderrLogger(int mask) {
- this.mask = mask;
- }
- @Override
- protected void writeMessage(String msg) {
- System.out.println("Writing to err : " + msg);
- }
- }
- public class Ex1 {
- public static void main(String[] args) {
- Logger logger = Logger.createChain();
- logger.message("Entering function y.", Logger.DEBUG);
- logger.message("Step 1 completed. ", Logger.NOTICE);
- logger.message("An error has occured.", Logger.ERR);
- }
- }
'java > design_pattern' 카테고리의 다른 글
Iterator Pattern - 열거자 (0) | 2014.07.01 |
---|---|
Visitor Pattern - 방문자 패턴 (0) | 2014.07.01 |
MediatorPattern - 중재자 패턴 (0) | 2014.07.01 |
ObserverPattern - 관찰자 패턴 (0) | 2014.07.01 |
Factory method pattern (0) | 2014.06.27 |