티스토리 뷰
디자인 패턴 - 커맨드 패턴
💡 요청을 캡슐화 해서 요청자(Invoker)와 수신자(receiver)를 분리하는 패턴으로 요청의 구현 내용이 바뀌더라도 요청자가 변경되지 않고 커맨드가 확장 될 수 있어 객체지향 원칙 OCP(Open Closed Principle)를 지킬 수 있다.
🎯 하나의 인터페이스를 통해 여러개의 구체적인 요청(Command)을 호출하도록 한다.
객체 모델
구현
👉 Command
@FunctionalInterface
public interface Command {
void execute();
}
Command
는 로직을 추상화 한다.
👉 ConcreteCommand
public class FirstConcreteCommand implements Command{
private Receiver receiver;
public FirstConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
System.out.println("첫번째 구체 명령 - receiver : " + receiver.getName());
}
}
👉 Invoker(요청자)
public class Invoker {
private Command command;
public Invoker(Command command) {
this.command = command;
}
public void invoke() {
command.execute();
}
}
👉 Receiver(수신자)
public class Receiver {
private String name;
public Receiver() {
}
public Receiver(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
👉 main()
public static void main(String[] args) {
Receiver hero = new Receiver("Hero");
Receiver chad = new Receiver("Chad");
Invoker heroInvoker = new Invoker(new FirstConcreteCommand(hero));
// 👉 CreteCommand를 람다를 통해 구현
Invoker chadInvoker = new Invoker(()
-> System.out.println("두번째 구체 명령 - receiver : " + chad.getName()));
heroInvoker.invoke();
chadInvoker.invoke();
}
𝌞 결과
👍 장점
- 기존 코드 수정없이 새로운 커맨드를 생성할 수 있다. 즉, OCP(Open Closed Principle) 를 지킬 수 있다.
- 수신자의 코드 변경에 클라이언트가 영향을 받지 않을 수 있다. 즉, 느슨한 결합(Loose coupling)을 이룬다.
🎯 예제코드
참조
'architecture > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 책임 연쇄 패턴(CHAIN OF RESPONSIBILITY) (0) | 2022.09.25 |
---|---|
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) (1) | 2022.09.24 |
[디자인 패턴] 플라이웨이트 패턴 (Flyweight pattern) (2) | 2022.09.24 |
[디자인 패턴] 파사드 패턴(Facade Pattern) (0) | 2022.09.23 |
[디자인 패턴] 프록시와 데코레이터 패턴 (0) | 2022.09.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pass by reference
- 수평 분할
- Clean Architecture
- 뾰족함
- multimap
- 클린 아키텍처
- 객체 풀
- 정적 타입 언어
- SpringBoot 2.2
- Sticky Session
- 장애 해결기
- 메모리 파편화
- ATDD
- 동적 디스패치
- pass by value
- Memory Fragmentation
- 동적 타입 언어
- 육각형 아키텍처
- OOP
- 외부 단편화
- Object Pool
- pool
- 내부 단편화
- 세션 불일치
- Session
- 수직 분할
- java
- 컴포짓 패턴
- RestAssured
- 메모리 단편화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함