软件构造-可维护性-Observer模式

subject:类似于“偶像”;
observer:类似于“粉丝”;
“粉丝”对“偶像”感兴趣,希望随时得知偶像的一举一动;
“粉丝”到“偶像”那里注册,“偶像”一旦有新闻发生,就推送给已注册的粉丝(回调callback“粉丝”的特定功能)。

java已经提供了Observer接口和Observable类,我们利用此实现观察者模式。

举例:

subject:

import java.util.Observable;

public class Subject extends Observable { // subject:“偶像”
	
	private int state;
	
	public Subject(int state) {
		this.state = state;
	}
	
	public int getState() {
		return state;
	}
	
	public void setState(int state) {
		if (this.state != state) {
			this.state = state;
			setChanged(); // 状态发生改变
		}
		notifyObservers(); // 通知“粉丝”
	}

}

observer:

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

public class BinaryObserver implements Observer { // observer:“粉丝”
	
	public BinaryObserver(Observable observable) {
		observable.addObserver(this); // 将自己添加到“偶像”粉丝列表中
	}

	@Override
	public void update(Observable o, Object arg) {
		//	被“偶像”回调
		System.out.println("Binary String: " + Integer.toBinaryString(((Subject)o).getState()));
	}

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

public class OctalObserver implements Observer { // observer:“粉丝”

	public OctalObserver(Observable observable) {
		observable.addObserver(this); // 将自己添加到“偶像”粉丝列表中
	}

	@Override
	public void update(Observable o, Object arg) {
		//	被“偶像”回调
		System.out.println("Octal String: " + Integer.toOctalString(((Subject)o).getState()));
	}

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

public class HexObserver implements Observer { // observer:“粉丝”

	public HexObserver(Observable observable) {
		observable.addObserver(this); // 将自己添加到“偶像”粉丝列表中
	}

	@Override
	public void update(Observable o, Object arg) {
		//	被“偶像”回调
		System.out.println("Hex String: " + Integer.toHexString(((Subject)o).getState()));
	}

}

Client:

public class Client {

	public static void main(String[] args) {
		//	一个“偶像”
		Subject subject = new Subject(10);
		//	三个“粉丝”
		new BinaryObserver(subject);
		new OctalObserver(subject);
		new HexObserver(subject);
		//	状态改变
		subject.setState(20);
	}

}

结果:
Hex String: 14
Octal String: 24
Binary String: 10100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值