본문 바로가기

Java/java 기초

자바 디자인 패턴 - Observer Pattern

옵저버 패턴:  감시자를 두어 변화가 생겼을때 알려주거나 변경하거나 값을 가져오는 형식

자바스크립트라이브러리중  mobx가 해당 패턴을 사용하던거같다

 

package cls;

import java.util.Observable;

public class MyClass extends Observable{
	
	private String preArg = null;
	
	// 일반 메소드 
	
	@Override
	public void notifyObservers(Object arg) {
		
		String str = (String)arg;
		
		 // 변화가 없을떄
		if(str.equals(preArg)) return; 
		
		// 변화가 있을때
		preArg = str;
		
		setChanged();	// reset
		
		super.notifyObservers(arg);
		clearChanged();	
	}

}

 

감시자 클래스 1

 

package observer;

import java.util.Observable;
import java.util.Observer;

public class ObserverA implements Observer {

	@Override
	public void update(Observable o, Object arg) {
		//MyClass 서 변화가 일어나면 이곳으로 들어온다.
		String str = (String)arg;
		System.out.println("감시자 A입니다 통지를 받았음 : " + str);
		
	}

}

 

 

감시자 클래스 2

 

package observer;

import java.util.Observable;
import java.util.Observer;

public class ObserverB implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		//MyClass 서 변화가 일어나면 이곳으로 들어온다.
				String str = (String)arg;
				System.out.println("감시자 B입니다 통지를 받았음 : " + str);
				
	}

}

 

메인 클래스

 

package main;

import cls.MyClass;
import observer.ObserverA;
import observer.ObserverB;

public class mainClass {
	public static void main(String[] args) {
		/*
		 * Observer: 정찰 -> 감시
		 */
		MyClass cls = new MyClass();
		
		// 감시자 A, B를 추가
		cls.addObserver(new ObserverA());
		cls.addObserver(new ObserverB());
		
		cls.notifyObservers("passsword: abc123");
	}
}

 

악용이 가능하게 만들수 있는 코드기 때문에 주의해서 사용한다고 하셨다

 

'Java > java 기초' 카테고리의 다른 글

awt - label  (0) 2019.12.05
awt 기초 부분 공부하기  (0) 2019.12.05
자바 디자인 패턴 - Factory Pattern  (0) 2019.12.04
Calendar  (0) 2019.12.04
싱글톤 패턴 공부하기 (Single Ton)  (0) 2019.12.03