观察者模式

                                            观察者模式

观察者模式

观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视一个被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新。

举一个生活中的例子来说明:一个商家有一些产品,它和一些电商合作,每当有新产品时,就会把这些产品推送到电商。其中商家的产品就是被观察者,而这些电商就是观察者。

产品列表类(被观察者)

package com.hlbdx.observable;

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);
	}
}

京东电商(观察者1)

package com.hlbdx.observable;

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

public class JingDongObserver implements Observer {

	public void update(Observable o, Object product) {
		String newProduct = (String) product;
		System.out.println("发送新产品【“" + newProduct + "”】同步到京东商城");
	}

}

淘宝电商(观察者2)

package com.hlbdx.observable;

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


public class TaoBaoObserver implements Observer {

	public void update(Observable o, Object product) {
		String newProduct = (String) product;
		System.out.println("发送新产品【“" + newProduct + "”】同步到淘宝商城");
	}

}

测试类

package com.hlbdx.observable;


public class TestObserver {

	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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值