JAVA设计模式温故篇-观察者模式

本文通过一个报社订阅的例子详细解析了观察者模式的工作原理。观察者(报社)在有新报纸出版时会通知所有订阅者(被观察者),而被观察者则会在接收到通知后执行特定的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一.观察者模式:

1.报社的业务是出版报纸

2.向某报社订阅报纸,只要他们有新报纸出版,就会给你送来,只要你是他们的订阅者,你就会一直收到新报纸

3.当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来

4.只要报社还在运营,就会一直有人向他们订阅或取消订阅

出版者+订阅者=观察者模式


实例解析

首先观察者要继承父类 Observable,被观察者要实现接口 Observer 这样之后,当观察者调用setChange()和notifyObservers()的时候,

被观察者就会执行update()方法,在update()方法里进行相关的操作

观察者(报社)代码:

package com.hpg.demo.publisher;

import java.util.Observable;

/**
 * 出版社
 * @author huarizhong
 *
 */
public class Publisher extends Observable{
	private String mName;
	private String mDate;
	/**
	 * 发新报纸
	 * @param paperName
	 * @param paperDate
	 */
	public void setNewPaper(String paperName,String paperDate){
		this.mName = paperName;
		this.mDate = paperDate;
		notifySubscribers();
	}
	/**
	 * 通知订阅者
	 */
	private void notifySubscribers(){
		//调用这两个方法才可以通知被观察者,被观察者就可以在update()方法中进行操作了
		setChanged();
		notifyObservers();
	}

	public String getmName() {
		return mName;
	}
	public String getmDate() {
		return mDate;
	}

}

被观察者(订阅用户)代码:

package com.hpg.demo.publisher;

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

public class Subscriber implements Observer{
	//声明 观察者(报社)
	private Observable mObservable;
	
	public Subscriber(Observable observable) {
		this.mObservable = observable;
		//添加到被观察者(订阅用户)
		mObservable.addObserver(this);
	}
	/**
	 * 被通知后进行操作
	 */
	@Override
	public void update(Observable o, Object arg) {
		if (o instanceof Publisher) {
			Publisher publisher = (Publisher) o;
			
			System.out.println("名称:"+publisher.getmName()+" 日期:"+publisher.getmDate());
		}
	}

}

具体实现代码:

package com.hpg.demo.publisher;

public class TestMain {
	public static void main(String args[]){
		//定义一个报社
		Publisher publisher = new Publisher();
		Subscriber subscriber = new Subscriber(publisher);
		publisher.setNewPaper("今日头条", "2015/2/13");
	}
}


运行结果


名称:今日头条 日期:2015/2/13


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值