简单理解观察者模式


观察者模式是一种一对多的依赖关系,设置了多个观察者对象来监视被观察对象的状态,当被观察对象发生变化时候,通知所有观察对象来相应这种变化。 Observable 被观察对象需要继承此类,以下方法均为此类方法            1. 新增观察者方法     addObserve            2. 标志被观察者变化    setChange            3. 告知观察者          notifyObservers  Observer  观察者需要实现这个接口,并且实现其中的update方法作为当被观察者发生变化时候的响应。

下面提供一个例子

存在一个供货商为淘宝和京东供货,我们认为供货商为被观察对象,

当新增一种产品时,作为观察者对象的淘宝和京东也要将新增产品上架销售。

被观察者代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

public class ProductList extends Observable {

	private List<String> productList = null; //产品列表
	
	private static ProductList instance; //类的唯一实例
	
	private ProductList(){}; //构造方法私有化,不允许在类外new对象
	
	/**
	 * 取得了唯一实例,单例模式。
	 * @return
	 */
	public static ProductList getInstance(){
		if(instance == null){
			instance = new ProductList();
			instance.productList = new ArrayList<String>();
		}
		return instance;
	}
	
	/**
	 * 新增观察者接口
	 */
	
	public void addProductListObserver(Observer observer){
		this.addObserver(observer);
	}
	/**
	 * 新增产品
	 * 核心方法为:
	 * 		setChanged 设置内部标志,指示被观察对象发生变化。
	 * 		notifyObservers 通知各个观察者对象。
	 */
	public void addProduct(String newProduct){
		productList.add(newProduct);
		this.setChanged();//设置被观察对象发生变化
		this.notifyObservers(newProduct);//通知观察者,并传递新产品
	}
}

观察者代码
import java.util.Observable;
import java.util.Observer;

public class TaoBaoObserver implements Observer {

	@Override
	public void update(Observable o, Object Product) {
		String newProduct = (String) Product;
		System.out.println("TB新增产品:" +newProduct);

	}
}


import java.util.Observable;
import java.util.Observer;

public class JingDongObserver implements Observer {

	@Override
	public void update(Observable o, Object Product) {
		String newProduct = (String) Product;
		System.out.println("JD新增产品:" +newProduct);

	}
	public static void main(String[] args) {
		ProductList observable = ProductList.getInstance(); // 创建被观察对象
		JingDongObserver jdObserver = new JingDongObserver();
		TaoBaoObserver tbObserver = new TaoBaoObserver();
		observable.addObserver(jdObserver);
		observable.addObserver(tbObserver);
		observable.addProduct("新增产品1");
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值