1. 개요
옵저버 (관찰자) 패턴은 변화가 일어났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴이다.
많이 보이는 곳은 event listener (swing, Android 등에서 사용)에서 해당 패턴을 사용한다.
2. 코드
package com.company.design.observer;
public interface IButtonListener {
void clickEvent(String event);
}
package com.company.design.observer;
public class Button {
private String name;
private IButtonListener buttonListener;
public Button(String name){
this.name = name;
}
public void click(String message){
buttonListener.clickEvent(message);
}
public void addListener(IButtonListener buttonListener) {
this.buttonListener = buttonListener;
}
}
버튼은 name과 리스너를 가진다.
click() 메소드를 실행하면 아직 구현하지 않은 리스너의 clickEvent 메소드가 실행된다.
addListener() 메소드는 매개변수로 리스너를 집어넣으면 버튼 안에 매개변수인 리스너를 대입한다.
package com.company.design.observer;
public class Main {
public static void main(String[] args) {
Button button = new Button("버튼");
button.addListener(new IButtonListener() {
@Override
public void clickEvent(String event) {
System.out.println(event);
}
});
button.click("메세지 전달 : click 1");
button.click("메세지 전달 : click 2");
button.click("메세지 전달 : click 3");
button.click("메세지 전달 : click 4");
}
}
메인에서 버튼을 생성하고, addListener에 인스턴스로 생성한 리스너를 넣어준다.
그리고 버튼을 click하면 리스너의 clickEvent가 실행되는데 아직 구현을 안했으니 메인에서 구현한다.
매개변수로 event를 받고, 그 이벤트를 sout으로 출력하는 메소드로 만들었다.
결과 버튼에서 click하게 되면 매개변수로 들어간 문자열이 출력된 것을 볼 수 있다.
이걸 활용해서 이벤트가 일어났을 때, 원하는 형식으로 전달하는 방식으로 사용한다.
'자바' 카테고리의 다른 글
디자인 패턴 7. 전략 패턴 (Strategy Pattern) (0) | 2022.03.12 |
---|---|
디자인 패턴 6. 파사드 패턴 (Facade Pattern) (0) | 2022.03.12 |
디자인 패턴 4. 데코레이터 패턴 (Decorator Pattern) (0) | 2022.03.12 |
디자인 패턴 3. 프록시 패턴 (Proxy Pattern), AOP (0) | 2022.03.12 |
디자인 패턴 2. 어댑터 패턴 (Adapter Pattern) (0) | 2022.03.11 |
댓글