본문 바로가기
Spring/디자인패턴

ObserverPattern(옵저버 패턴)

by 미눅스[멘토] 2023. 7. 24.
728x90

ObserverPattern은

관찰자 패턴은 변화가 일어 났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다.

많이 보이는 곳은 event listener에서 해당 페턴을 사용 하고 있다.

 

 

 

ex) 교실에서 누군가 망을 보다가 선생님 오신다라고 한다면

그 가운데 있는 친구가 옵저버가 되어서 안쪽에 있는 친구들에게 이벤트를 전달한다.

 

관찰을 하고있는 친구가 관찰하는것에 변화가 생기면 미리 등록되어있는 친구들에게

이벤트를 전달해 주는것을 옵저버 패턴이라고 한다.

 

 

IButtonListener(인터페이스)

package Muzi.observer;

public interface IButtonListener {
	 void clickEvent(String event);
}

 

Button(클래스)

package Muzi.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;
	}
}

 

Main(클래스)

package Muzi;

import Muzi.observer.Button;
import Muzi.observer.IButtonListener;

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("메시지 전달 : click1");
		button.click("메시지 전달 : click2");
		button.click("메시지 전달 : click3");
		button.click("메시지 전달 : click4");
	}
}