객체의 상태 변화를 관찰하는 옵저버(관찰자)들이 있고 이런 옵저버들의 목록을 객체에 등록해 상태 변화가 있을 때 마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 즉, 옵저버의 리스트를 가지고 있는 객체의 상태가 변하면 옵저버를 통해 객체들에게 알림을 보낸다.
1
2
3
|
interface Listener{
void actionPerformed();
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
|
class ButtonActionListener implements Listener{
private Button myButton;
@Override
public void actionPerformed(){
System.out.println(this.myButton.getTitle() + "버튼 클릭됨");
}
public void setButton(Button b) {
myButton = b;
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Button {
private String title;
private ButtonActionListener myListener;
public Button(String t) {
title = t;
}
public String getTitle() {
return title;
}
public void addListener(ButtonActionListener l) {
this.myListener = l;
this.myListener.setButton(this);
}
public void click() { // 콜백 함수
// 여기서 리스너를 호출한다.
myListener.actionPerformed();
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Main {
public static void main(String[] args) {
Button fileButton = new Button("File");
fileButton.addListener(new ButtonActionListener());
fileButton.click();
Button editButton = new Button("Edit");
editButton.addListener(new ButtonActionListener());
editButton.click();
}
}
|
cs |