반응형
행동 패턴 - Chain of responsibility
해결하려는 문제
- 메시지를 보내는 객체와 처리하는 객체를 분리하고 싶을 때
- 하나의 메시지를 여러 객체가 처리해야 할 때
public class Main {
public static void main(String[] args) {
User user = new User();
MessageSenderChain smsSenderChain = new SmsSenderChain();
smsSenderChain.next(new PushSenderChain())
.next(new EmailSenderChain());
smsSenderChain.send(user, new MessageDetail());
}
}
public abstract class MessageSenderChain {
private MessageSenderChain next;
public void MessageSenderChain next(MessageSenderChain next) {
// smsSenderChain.next = pushSenderChain
this.next = next; // pushSenderChain
return next;
}
public void sender(User user, MessageDetail messageDetail) {
// TODO
execute(user, messageDetail);
// next
if (nonNull(next)) {
next.sent(user, messageDetail);
}
}
protected abstract void execute(User user, MessageDetail messageDetail);
}
public class MessageDetail {
}
public class SmsSenderChain extends MessageSenderChain {
@Override
protected void execute(User user, MessageDetail messageDetail) {
System.out.println("SMS 메시지 전송!");
}
}
public class PushSenderChain extends MessageSenderChain {
@Override
protected void execute(User user, MessageDetail messageDetail) {
System.out.println("PUSH 메시지 전송!");
}
}
public class EmailSenderChain extends MessageSenderChain {
@Override
protected void execute(User user, MessageDetail messageDetail) {
System.out.println("E-mail 전송!");
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ChainConfig {
// adaptor
// repository
@Bean
public MessageSenderChain chain() {
MessageSenderChain chain = new SmeSenderChain();
chain.next(new PushSenderChain())
.next(new EmailSenderChain());
return chain;
}
}
반응형
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 9-2. 좋은 코드, 나쁜 코드, 이상한 코드 (0) | 2022.03.16 |
---|---|
[Zero-base] 11-12. 디자인 패턴 정리 (0) | 2022.03.15 |
[Zero-base] 11-10. 템플릿 메서드(Template Method) (0) | 2022.03.15 |
[Zero-base] 11-9. 스트러티지(Strategy) (0) | 2022.03.15 |
[Zero-base] 11-8. 프록시(Proxy) (0) | 2022.03.15 |