观察者设计模式

       观察者模式存在观察者和被观察者,观察者有多个,被观察者有一个。当被观察者状态改变时,观察者要做出对应得更新。该设计模式基于回调机制,被观察者要继承Observable类,观察者要实现Observer接口,并实现update()方法。

1:被观察者:ProductList

package observer;

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() {}//构造方法私有化
	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);
	}
	public void addProduct(String newProduct) {
		productList.add(newProduct);
		System.out.println("产品列表新增加了产品:"+newProduct);
		this.setChanged();//设置被观察对象发生变化
		this.notifyObservers(newProduct);  //通知观察者,并传递新产品
	}
}

二:观察者:JingDongObserver,TaobaoObserver

package observer;

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

public class JingDongObserver implements Observer{

	@Override
	public void update(Observable o, Object product) {
		// TODO Auto-generated method stub
		String newProduct=(String)product;
		System.out.println("发布了新产品:"+newProduct+"同步到京东商城");
	}
}
package observer;

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

public class TaobaoObserver implements Observer{

	@Override
	public void update(Observable o, Object product) {
		// TODO Auto-generated method stub
		String newProduct=(String)product;
		System.out.println("发布了新产品:"+newProduct+"同步到淘宝");
	}

}

3:测试类:ObserverTest

package observer;

import java.util.Observable;

import com.sun.org.apache.xpath.internal.axes.OneStepIterator;

public class ObserverTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ProductList observable=ProductList.getInstance();
		TaobaoObserver taoBao=new TaobaoObserver();
		JingDongObserver jingDong=new JingDongObserver();
		observable.addObserver(taoBao);
		observable.addObserver(jingDong);
		observable.addProduct("新增产品辣条");
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值