Android 디자인 모드 의 관찰자 모드 상세 설명

풋내기 로 서 오늘 의 프로젝트 는 한 무더기 의 디자인 모델 을 사용 해 야 한다. 갑자기 어 지 러 워 졌 지만 일어나 서 잘 유린 하기 로 결정 했다. 다음은 관찰자 모델 을 간단하게 말 해 보 자.
먼저 작은 이 야 기 를 하 다.
어느 학교 어느 반 에 정향 이라는 여학생 이 있 었 는데, 그녀 는 젊 고 아름 답 고 성적 도 좋 았 다.그래서 반 의 남학생 들 은 모두 그 를 좋아 하고 추구 하 는 사람 이 무수 하 다.그 중 열 명의 작은 형 이 바로 그의 충실 한 팬 이다.
몰래 한 마디 하 자 면 이 정향 아가 씨 는 바로 '피 관찰자' 이 고 이 열 명의 작은 형 은 바로 '관찰자' 이다.
어느 날 정향 아가씨 가 그녀의 절친 에 게 사 과 를 좋아한다 고 한 마디 했 는데, 이 말 은 시시각각 그녀의 언행 을 관찰 하 는 꼬마 들 에 게 들 렸 다.
그 러 자 다음날 수업 시간 에 이 정향 아가씨 의 책상 안에 사과 열 개가 숨 어 있 었 다.
어느 날 A. 작은 형 은 정향 에 게 고백 하 는 것 을 참 을 수 없 었 다. 정향 아가 씨 는 그 A 작은 형 이 키 가 작 아서 절벽 과 함께 있 을 수 없다 고 말 했다.이 작은 형 은 매우 슬 프 게 들 어서 더 이상 그녀 에 게 구애 하지 않 는 다.
A 작은 형 과 같은 기숙사 에 있 는 키 큰 B 작은 형 은 A 작은 형의 이 야 기 를 들 었 다. 자신 이 가능 하 다 고 생각 하여 이 고 량 에 게 다가 가 표현 을 보 았 다.
이렇게 B 형 은 매일 정향 아가씨 가 무엇 을 필요 로 하 는 지 지 켜 보 며 요구 하면 반드시 들 어 준다.
이야기 가 끝나 면 결말 이 무엇 인지 정 방 형 은 모른다.
이 야 기 를 잘 하지 못 하 는 것 은 아마도 이런 뜻 일 것 이다.
한 마디 로 하면 많은 '관찰자' 들 이 '피 관찰자' 를 동시에 관찰 하면 피 관찰자 가 모든 '관찰자' 를 증가 / 삭제 할 수 있다. 가장 중요 한 것 은 '피 관찰자' 가 새로운 변화 가 있 을 때 모든 '관찰자' 가 '피 관찰자' 의 변 화 를 업데이트 하 는 방법 을 호출 하 는 것 이다.
다음은 하나의 사례 로 네트워크 자원 을 참고 하여 간단 하고 문 제 를 설명 한다.
</pre><pre name="code" class="java">public interface Watcher{
 //                  
 public void updateNotify(Content content);
}
//         :      
public interface Watched{
 //                   
 public void add(Watcher watcher);
 //                 
 public void remove(Watcher watcher);
 //                         
 public void notifyWatcher(Content content);
}
//          :                
public class ConcreteWatcher implements Watcher{
 //      
 public void updateNotify(Content content){
   	int id = content.getId();
        String name = content.getName();
	String address = content.getAddress();
	System.out.println("id:"+id++"/n name:"+name+"/n address:"+address);
 }
}
//          :                    
public class ConcreteWatched implements Watched{
  //    List   Watcher
  private List<Watcher> list = new ArrayList<Watcher>();
 //      
 public void add(Watcher watcher){
       list.add(watcer);
 }
 public void remove(Watcher watcher){
	list.remove(watcher);
 }
 public void notifyWatcher(Content content){
    	for(Watcher watcher : list){
              watcher.updateWatcher(content);
       }
 }
}
//           ,             
public class Content{
 private int id;
 private String name;
 private String address;
 public void setId(int id){
    this.id = id;
 }
 public int getId(){
    return id;
 }
 public void setName{String name}{
    this.name = name;
 }
 public String getName(){
    return name;
 }
 public void setAddress(String address){
    this.address = address;
 }
 public String getAddress(){
    return address
 }
}
//   
public classs Test{
 public static void main(String args[]){
	//        
    	Watched watched = new Watched();
	//                 
        Watcher watcher1 = new Watcher();
	//                 
	Watcher watcher2 = new Watcher();
	//                 
	Watcher watcher3 = new Watcher();
	//      
	watched.add(watcher1);
	watched.add(watcher2);
	watched.add(watchre3);
	//          :        
	Content content = new Content();
	content.setId("0001");
	content.setName("jiangshide");
	content.setAddress("beijing");
	watched.notifyWatchers(content);
	//            
	watched.remove(watchr2);
	content.setName="litian";
	watched.notifyWatchers(content);
 }
}

관찰자 와 피 관찰 자 는 일대일 의 관계 이다. 즉, 피 관찰 자 는 여러 관찰자 에 의 해 공동으로 관심 을 가 질 수 있다. 피 관찰자 가 업 데 이 트 될 때 그 관찰자 에 대해 자동 으로 정 보 를 업데이트 한다.

좋은 웹페이지 즐겨찾기