"어떻게 사용 하나 요" 관찰자 모드

9959 단어 [디자인 모드]
논술 하 다
대상 간 에 한 쌍 이상 의 의존 관 계 를 정의 하면 한 대상 이 상 태 를 바 꿀 때 그 에 의존 하 는 모든 대상 이 알림 을 받 고 자동 으로 업 데 이 트 됩 니 다.
주제 [발표 자]
import java.util.Observable;

@Data
public class SubjectData extends Observable {

    /**
     *           
     */
    private String lookData;

    /**
     *               ,        
     * @param changeData :       
     */
    public void lookDataChanged(String changeData) {
        //      
        lookData = changeData;
        //             
        this.setChanged();
        //        
        this.notifyObservers(lookData);
    }
}

구독 자
import java.util.Observable;
import java.util.Observer;

public class ObserverOne implements Observer {

    /**
     *             ,                      ,              
     */
    private Observable observable;

    /**
     *         ,         
     */
    public ObserverOne(Observable observable) {
        this.observable = observable;
    }

    /**
     *          
     *             lookDataChanged()    ,            
     *        
     * @param o
     * @param arg
     */
    @Override
    public void update(Observable o, Object arg) {
        if (o instanceof SubjectData) {
            String lookData = (String) arg;
            System.out.println("ObserverOne get lookData = " + lookData);
        }
    }

    /**
     *          
     *                        ,            
     */
    public String getData() {
        if (observable instanceof SubjectData) {
            SubjectData subjectData = ((SubjectData) observable);
            return subjectData.getLookData();
        }
        return "instance error";
    }
}

테스트
public class TestDrive {

    public static void main(String[] args) {
        //       
        SubjectData subjectData = new SubjectData();
        //      ,            
        ObserverOne observerOne = new ObserverOne(subjectData);
        ObserverTwo observerTwo = new ObserverTwo(subjectData);

        //                 
        subjectData.addObserver(observerOne);
        subjectData.addObserver(observerTwo);

        //          
        subjectData.lookDataChanged("    ");

        //            ,            
        String observerOneData = observerOne.getData();
        System.out.println("observerOneData = " + observerOneData);
    }
}

출력:
ObserverTwo get lookData =     
ObserverOne get lookData =     
observerOneData =     

좋은 웹페이지 즐겨찾기