자기 이해-관찰자(Observer)모드

관찰자(Observer)모드
관찰자(Observer)모드 도 게시 구독 모드 가 될 수 있 습 니 다.이 모드 는 대상 간 의 모드 이 고 대상 간 에 한 쌍 이상 의 관 계 를 나 타 냅 니 다.그 중 하 나 는 피 관찰자 이 고 대부분 관찰자 이기 때문에 피 관찰 자 는 여러 개의 대상 을 만 들 지 못 하고 한 개의 대상 만 관찰자 가 관찰 할 수 있 기 때문에 피 관찰 자 를 쓸 때 단일 모델 로 사용 해 야 한다.
코드 이해
그러면 우 리 는 코드 를 통 해 관찰자 모델 을 직관 적 으로 이해 할 수 있다.
package observer;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
//    --    
public class Products extends Observable {
    //    
    private List proList = null;
    private static Products instance;
    //      (      )
    private Products() {
        
    }
    //    -      
    public static Products getInstance() {
        if(instance == null) {
            instance = new Products();
            instance.proList = new ArrayList<>();
        }
        return instance;
    }
    /**
     *      (    )
     * @param observer    
     */
    public void addProductsObserver(Observer observer) {
        this.addObserver(observer);
    }
    /**
     *     (    )
     * @param newProduct    
     */
    public void addProduct(String newProduct) {
        if(newProduct==null || "".equals(newProduct)) {
            System.out.println("            !");
        }else {
            System.out.println("        :"+proList.size()+"   !");
            //    
            proList.add(newProduct);
            System.out.println("          :"+newProduct);
            System.out.println("        :"+proList.size()+"   !");
            //             (     ,         )
            this.setChanged();
            //     ,      
            this.notifyObservers(newProduct);
        }
    }
}
package observer;
import java.util.Observable;
import java.util.Observer;
//   1-      
public class JDObserver implements Observer {
    /**
     *        
     * 1.Observable     
     * 2.product   
     */
    @Override
    public void update(Observable o, Object product) {
        Products pro = (Products) o;
        System.out.println("    :"+ pro);
        String newProduct = (String) product;
        System.out.println("     【"+newProduct+"]     !");
    }
}
package observer;

import java.util.Observable;
import java.util.Observer;
//   
public class TaoBaoObserver implements Observer {
    /**
     *        
     * 1.Observable     
     * 2.product   
     */
    @Override
    public void update(Observable o, Object product) {
        Products pro = (Products) o;
        System.out.println("    :"+ pro);
        String newProduct = (String) product;
        System.out.println("     【"+newProduct+"]     !");
    }
}

결과 테스트
결과 전시 에서 우 리 는 목록 에 제품 을 추가 한 다음 에 관찰자 와 피 관찰자 간 의 변 화 를 관찰 하고 실행 코드 는 다음 과 같은 결 과 를 얻 을 수 있다.
제품 추가:
제품 이 비어 있 음:

좋은 웹페이지 즐겨찾기