很简单的的观察者模式例子

首先来解释下观察者模式:



在上图中改变属性的对象称为主体(subject),观察改变的对象称为观察器(observer)。Observer类有一个简单的接口,它包含一个update方法,当属性发生改变时,这个方法由主体调用,为观察器提供了一个刷新机会。主体有一组Observer对象,它们记录变化中一个方面——使用addObserver方法进行记录,如果需要可以使用removeObserver方法取消记录。主体还有一个受保护的notify方法,它在观察器上迭代,调用每个观察器上的update方法。
例子:

import java.util.ArrayList;
import java.util.List;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ConcreateSubject subject = new ConcreateSubject();
		ConcreateObserver observer = new ConcreateObserver();
		observer.setSubject(subject);
		subject.setValue(8);
	}
}

// 主体
abstract class Subject {
	private List<Observer> observers = new ArrayList<Observer>();

	public void addObserver(Observer observer) {
		observers.add(observer);
	}

	public void removeObserver(Observer observer) {
		observers.remove(observer);
	}

	protected void notifyObserver() {
		System.out.println("通知观察器");
		for (int i = 0; i < observers.size(); i++) {
			observers.get(i).update();
		}
	}
}

// 观察器
interface Observer {
	public void update();
}

// 实现subject的类
class ConcreateSubject extends Subject {
	private int value;

	public void setValue(int value) {
		this.value = value;
		notifyObserver();
	}

	public int getValue() {
		return value;
	}

	// 可以实现自己的通知方式
	protected void notifyObserver() {
		super.notifyObserver();

	}
}

// 实现ObServer的类
class ConcreateObserver implements Observer {
	private ConcreateSubject subject;

	public ConcreateSubject getSubject() {
		return subject;
	}

	public void setSubject(ConcreateSubject subject) {
		this.subject = subject;
		subject.addObserver(this);
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		System.out.println("主体改变了 新值为:" + subject.getValue() + ",接下来进行更新操作...");
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值