设计模式(十六) 观察者模式

观察者模式也叫发布/订阅模式, 定义一种1对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新

在这里插入图片描述

观察者模式的几个角色:

  • Subject 被观察者。定义被观察者必须实现的职责,它必须能够动态的增加,取消观察者。 要有管理观察者并通知观察者。
  • Observer观察者。观察者接收到消息后,进行update操作,对接收到的信息进行处理。
  • ConcreteSubject 具体的被观察者。 定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
  • ConcreteObserver 具体的观察者。 每个观察者接收到消息后的处理反应是不同的,各个观察者有自己的处理逻辑。

public abstract class Subject{

	private Vector<Observer> obsVector=new Vector<>();
	public	void addObserver(Observer o){
		this.obsVector.add(o);
	}
   public	void delObserver(Observer o){
		this.obsVector.remove(o);
	}
	public	void  notifyObservers(Observer o){
		for(Observer o: this.obsVector){
			o.update();
		}
	}
}
public class ConcreteSubject extends Subject{
	public void doSomething(){
		// do something
		super.notifyObservers();
	}
}
public interface Observer{
	public void update();
}
public class ConcreteObserver implements Observer{
		public void udpate(){
			System.out.println("receive message , and handle");
		}
}
public class Client{
		public static void main(String[] args){
			 ConcreteSubject subject=new ConcreteSubject();
			 Observer obs=new ConcreteObserver();
			 subject.addObserver(obs);
			subject.doSomething();
		}
}

观察者模式的优点

  • 观察者和被观察者之间是抽象耦合的
  • 建立一套触发机制。 根据单一职责,每个类的职责都是单一的,观察者模式为不同类之间的职责串了起来。

观察者模式缺点

开发效率与运行问题,多个观察者时,观察者卡壳会影响整体执行效率。

观者者模式的使用场景

  • 关联行为场景
  • 事件多级触发
  • 跨系统的消息交换场景,如消息队列的处理机制。

观察者模式的注意事项

  • 广播链的问题。 观察者和被观察者不要形成环
  • 异步处理问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值