一、观察者模式定义:
指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式
优点:
- 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。
- 目标与观察者之间建立了一套触发机制。 缺点:
- 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。
- 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。 观察者模式和发布订阅模式区别:\
发布-订阅模式是面向调度中心编程的,而观察者模式则是面向目标和观察者编程的。前者用于解耦发布者和订阅者,后者用于耦合目标和观察者 二、 spring中ApplicationContext应用观察者示例如下:
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class Test1Controller {
@Resource
private ApplicationContext applicationContext;
@GetMapping(value = "/test")
public void test(){
String message = "小丽你的黑s针不戳,来我办公室一趟";
applicationContext.publishEvent(new TestEvent(this,message));
}
}
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
@Getter
public class TestEvent extends ApplicationEvent {
private final String message;
public TestEvent(Object source, String message){
super(source);
this.message = message;
}
}
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class TestEventListener {
@EventListener
public void receiveMessage(TestEvent testEvent){
System.out.print(testEvent.getMessage());
}
}
一段简单的代码送给大家,后期会开发公众号,如有疑问可以加我微信,共同学习~