设计模式之观察者模式

观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化。
观察者模式包含四个角色:抽象主题(Subject)、具体主题、抽象观察者(Observer)、具体观察者

观察者模式的实现

我们创建一个彩票的主题,以购彩者作为观察者,向彩票主题进行注册,而彩票主题则向购彩者进行通知,来实现观察者模式。
下面是一个抽象主题,包含注册观察者、取消观察者以及通知观察者的方法。

public interface Subject {
	//注册观察者
	public void registObserver(Observer observer);
	//取消观察者
	public void removeObserver(Observer observer);
	//通知观察者
	public void notifyObserver();
}

我们需要一个抽象观察者,包含获得消息的方法

public interface Observer {
	//观察者获得消息
	public void update(String msg);
}

接下来我们编写具体主题类,其中包含一个集合,用于存储注册的观察者对象,当我们要发送消息,主题就会遍历其集合中所存储的所有观察者对象,调用观察者获得消息的方法,发送消息。

public class Sport3DSubject implements Subject {
	//定义一个集合,存储观察者的对象
	private List<Observer> observers = new ArrayList<>();
	//消息
	private String msg;
	//给主题设置要发送的消息
	public void setMsg(String msg) {
		this.msg = msg;
		//设置完消息通知观察者
		notifyObserver();
	}
	public void registObserver(Observer observer) {
		//添加观察者
		observers.add(observer);
	}
	public void removeObserver(Observer observer) {
		//校验这个观察者是否在集合中
		int index = observers.indexOf(observer);
		if (index >= 0) {
			observers.remove(observer);
		}
	}
	public void notifyObserver() {
		//遍历观察者,逐个发消息
		for (Observer observer : observers) {
			observer.update(msg);
		}
	}
}

对观察者模式进行测试

//主题对象
Sport3DSubject subject = new Sport3DSubject();
//创建观察者,并注册
ObserverPerson observer = new ObserverPerson(subject);
ObserverPerson observer2 = new ObserverPerson(subject);
ObserverPerson observer3 = new ObserverPerson(subject);
//通知
subject.setMsg("开奖号码为1");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值