自我理解-觀察者(Observer)模式

觀察者(Observer)模式

觀察者(Observer)模式 也能夠成爲發佈訂閱模式,此模式是對象之間的模式,對象之間呈現一種一對多的關係。其中的一是被觀察者,可能是觀察者,故被觀察者不能產生多個對象,只能有一個對象供觀察者觀察,因此在寫被觀察者的時候,須要使用到單例模式。java

代碼理解

那麼咱們能夠經過代碼來很直觀的理解觀察者模式ide

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<String> 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+"]到京東商城!");
    }
}

結果測試

結果展現中,咱們經過在列表中新增一個產品,而後來觀察者和被觀察者之間的變化,執行代碼可獲得如下結果:測試

新增一個產品:

圖片描述

產品爲空:

圖片描述

相關文章
相關標籤/搜索