본문 바로가기

JAVA/UI

Observer

Observer는 2개이상.

 

Main

public class mainClass {

	public static void main(String[] args) {
		/*
		 	Observer : 감시, 정찰
		 			감시자 패턴 => class감시
		 */
		MyClass cls = new MyClass();
		
		//cls에 감시자를 추가 함
		cls.addObserver(new ObserverA());//update들 에서 호출
		cls.addObserver(new ObserverB());
		
		cls.setId("abc123");
		cls.setPassword("a1004");
		
		//받아온 바뀐 데이터를 " " 안에 집어넣음
		cls.notifyObservers(cls.getPassword());
		//감시자 B입니다. 변화를 감지했습니다 : a1004
		//감시자A 입니다. 통지 받았음 : a1004
	}
}

MyClass

public class MyClass extends Observable{//Human
	
	private String preArg = null;
	
	private String id;
	private String password;
	
	//일반메소드
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public void notifyObservers(Object arg) {
		
		String str = (String)arg;
		
		//변화가 없었을 때 -> 통지 안함.
		if (str.equals(preArg)) return;//->현재null값, null이 리턴됨
		
		//변화가 있을 때 
		preArg = str;
		
		setChanged();//reset
		
		super.notifyObservers(arg); //통보가됨
		clearChanged();
	}
}

ObserverA

public class ObserverA implements Observer {

	@Override
	public void update(Observable o, Object arg) {

		String str = (String)arg;
		System.out.println("감시자A 입니다. 통지 받았음 : "+str);
	}
}

ObserverB

public class ObserverB implements Observer {
	@Override
	public void update(Observable o, Object arg) {
		String msg = (String)arg;
		
		System.out.println("감시자 B입니다. 변화를 감지했습니다 : "+msg);
	}
}

'JAVA > UI' 카테고리의 다른 글

가위바위보 게임 프로그램  (0) 2020.06.12
label / 확인창 뜨게하기  (0) 2020.06.11
Label 과 Panel  (0) 2020.06.11
AWT  (0) 2020.06.11
Lable  (0) 2020.06.11