자바 디자인 모드 - 리 셋 함수 와 관찰자 모드

안 드 로 이 드 의 프레임 워 크 에는 액 티 비 티 의 라 이 프 사이클, 버튼 클릭 이벤트 등 리 셋 모드 를 사용 하 는 곳 이 매우 많다.
다음은 리 셋 의 기본 모델 입 니 다.
public class A {
	private CallBack callback;
	//      
	public void register(CallBack callback){
		this.callback = callback;
	}
	//          
	public void call(){
		callback.oncall();
	}
}
public interface CallBack {
	public void oncall();
}
public static void main(String[] args) {
	A a = new A();
	a.register(new CallBack() {
		@Override
		public void oncall() {
			System.out.println("       ");
		}
	});
	a.call();
}

클래스 A 를 Button 으로 바 꾸 면 CallBack 을 OnClickListener 로 바 꾸 고 register 함 수 를 setOnclickListener 로 바 꾸 면 안 드 로 이 드 에 클릭 이 벤트 를 설정 하 는 것 과 같 습 니 다.callback.oncall();이벤트 자극 을 클릭 한 후에 호출 된 것 뿐 입 니 다.
관찰자 모드:
대상 간 의 한 쌍 이상 의 의존 관 계 를 정의 합 니 다. 대상 상태 가 바 뀌 면 모든 의존 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
목표:
public class Subject {

	List<Observer> lists = new ArrayList<Observer>();
	
 	//      
	public void register(Observer observer){
		lists.add(observer);
	}

	public void _notify(){
		for (Observer observer : lists) {
			observer.update();
		}
	}
	
	public void unRegister(Observer observer){
		lists.remove(observer);
	}
}
 
 
 
 

观察者抽象接口

public interface Observer {
	public void update();
}

관찰자
public class ConcreteObserver1 implements  Observer{

	public void update() {
		System.out.println("ConcreteObserver1    ");
	}
}
 
  
 

观察者2

public class ConcreteObserver2 implements  Observer{

	public void update() {
		System.out.println("ConcreteObserver2    ");
	}
}
 
 
public static void main(String[] args) {
	Observer observer1 = new ConcreteObserver1();
	Observer observer2 = new ConcreteObserver2();
	Subject subject = new Subject();
	subject.register(observer1);
	subject.register(observer2);
	subject._notify();
	//     1   
	subject.unRegister(observer1);
	subject._notify();
}
 
  
 

目标对象保存了各个观察者的引用,当需要通知时发送通知。

实际上,回调是观察者模式的简单形式。观察者模式也就是将回调上升到设计模式的理论高度上了而已。

将回调例子中的main方法改成        

public static void main(String[] args) {
	CallBack callback = new CallBackImp();
	A a = new A();
	a.register(callback);
	a.call();
}
 
 

增加CallBack的实现类CallBackImp

public class CallBackImp implements CallBack{
	@Override
	public void oncall() {
		System.out.println("       ");
	}
}

이렇게 보면 일치 합 니 다. 차이 점 은 관찰자 모델 에서 목표 류 는 모든 관찰자 의 인용 을 지 켰 고 리 턴 에 서 는 하나의 인용 만 지 켰 습 니 다.

좋은 웹페이지 즐겨찾기