当前位置: 首页 > news >正文

云南省网站建设公司韶关做网站公司

云南省网站建设公司,韶关做网站公司,建设音乐网站,培训课观察者模式是一种行为设计模式#xff0c;它定义了一种一对多的依赖关系#xff0c;让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时#xff0c;它的所有观察者都会收到通知并更新。观察者模式常用于实现事件处理系统、发布-订阅模式等。在项目中#xff0c…观察者模式是一种行为设计模式它定义了一种一对多的依赖关系让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时它的所有观察者都会收到通知并更新。观察者模式常用于实现事件处理系统、发布-订阅模式等。在项目中我们使用RabbitMQ、Kafka、ActiveMQ等消息中间件来进行解耦、异步、广播、削峰,在设计模式中我们可以使用观察者模式也能达到解耦、异步的特点。下面我将介绍观察者模式。 观察者模式的主要角色 Subject主题被观察的对象包含对观察者的引用列表并提供注册、移除和通知观察者的方法。Observer观察者定义一个更新接口用于接收主题的通知。ConcreteSubject具体主题具体的主题实现了主题接口状态发生改变时通知所有注册的观察者。ConcreteObserver具体观察者具体的观察者实现了观察者接口响应主题的变化。 Java 实现观察者模式 下面是一个简单的 Java 观察者模式示例 1. 定义观察者接口 public interface Observer {void update(String message);// 处理业务逻辑 }2. 定义主题接口 public interface Subject {void registerObserver(Observer observer);// 添加观察者void removeObserver(Observer observer);// 移除观察者void notifyObservers();// 通知所有观察者事件 }3. 实现具体主题 public class ConcreteSubject implements Subject{private ListObserver observers;private String message;public ConcreteSubject() {this.observers new ArrayList();}Overridepublic void registerObserver(Observer observer) {observers.add(observer);}Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(message);}}public void setMessage(String message) {this.message message;notifyObservers();} }4. 实现具体观察者 public class ConcreteObserver implements Observer {private String name;public ConcreteObserver(String name) {this.name name;}// 模拟处理业务逻辑Overridepublic void update(String message) {System.out.println(name received message: message);} }5.测试 public class ObserverPatternDemo {public static void main(String[] args) {ConcreteSubject subject new ConcreteSubject();Observer observer1 new ConcreteObserver(Observer 1);Observer observer2 new ConcreteObserver(Observer 2);Observer observer3 new ConcreteObserver(Observer 3);subject.registerObserver(observer1);subject.registerObserver(observer2);subject.registerObserver(observer3);System.out.println(----------------------向三个订阅者发送消息 First Message----------------------);subject.setMessage(First Message);System.out.println(----------------------向三个订阅者发送消息 Second Message----------------------);subject.setMessage(Second Message);System.out.println(----------------------依次一个订阅者并发送消息 Third Message-------------------------);subject.removeObserver(observer2);subject.setMessage(Third Message);} }6.结果 7.分析 在这里我们可以看到我们已经可以做到可以向多个订阅者发送消息而只需要创建一个新的订阅者放入observers容器里面从而达到解耦的目的。 而要达到异步的功能可以利用java的并发工具比如线程、“ExecutorService”等。下面给出实现思路 1.使用 ExecutorService 使用 Executors.newCachedThreadPool() 创建一个可缓存的线程池。可以使用其他类型的线程池如 FixedThreadPool 或 SingleThreadExecutor根据具体需求选择。 2.异步通知 在 notifyObservers 方法中通过 executorService.submit() 提交任务使得每个观察者的 update 方法在单独的线程中执行达到了异步通知的效果。 3.资源管理 在合适的时候调用 executorService.shutdown() 来关闭线程池确保资源得到释放。通过这种方式实现了观察者模式的异步通知使得观察者的 update 方法可以并发执行提高了效率避免了通知过程中阻塞的问题。 观察者模式在框架中的应用 1. Java Swing Java Swing 中的事件处理模型大量使用了观察者模式。按钮点击、窗口关闭等事件的处理都是通过事件监听器实现的。 2. Spring Framework Spring 框架中也广泛使用了观察者模式特别是在事件驱动的编程模型中。 ApplicationEvent 和 ApplicationListener Spring 提供了一个事件机制通过 ApplicationEvent 和 ApplicationListener 实现观察者模式。 import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component;Component public class MyApplicationListener implements ApplicationListenerContextRefreshedEvent {Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {System.out.println(Context Refreshed Event received!);} } public class MyCustomEvent extends ApplicationEvent {public MyCustomEvent(Object source) {super(source);} }Component public class MyCustomEventListener implements ApplicationListenerMyCustomEvent {Overridepublic void onApplicationEvent(MyCustomEvent event) {System.out.println(Custom Event received!);} }// 发布事件 Component public class MyBean {private final ApplicationEventPublisher publisher;public MyBean(ApplicationEventPublisher publisher) {this.publisher publisher;}public void publishEvent() {MyCustomEvent event new MyCustomEvent(this);publisher.publishEvent(event);} } 3. Google Guava Google Guava 提供的 EventBus 是一种实现发布-订阅Pub/Sub模式的工具它的实现也是采用设计模式中的观察者设计模式。,它广泛应用于解耦事件生产者和消费者。在 EventBus 中事件生产者和事件消费者可以彼此独立地工作彼此无需直接依赖。 观察者模式的优缺点 优点 解耦观察者和主题之间是抽象耦合的可以独立扩展观察者和主题。动态订阅观察者可以在运行时动态添加或移除。灵活性可以在不修改主题类的情况下增加新的观察者实现了开闭原则。 缺点 可能引起性能问题如果观察者较多通知所有观察者可能会比较耗时。可能导致内存泄漏如果观察者没有及时被移除可能导致内存泄漏。 使用场景 事件处理系统GUI 事件监听按钮点击事件。发布-订阅系统消息队列订阅推送服务。数据变化通知数据模型变化通知视图更新类似于 MVC 模式中的观察者角色
http://www.hkea.cn/news/14464329/

相关文章:

  • 服务器域名已有做网站wordpress 去除评论框
  • 中国建设银行官网站诚聘英才网站建设 生产
  • 重庆模板做网站管理咨询公司怎么找客户
  • .design 域名的网站汕头网站推广seo
  • 做网站 江门做互联网的网站
  • 注册网站建设公司主营项目类别游戏网站首页设计
  • 广州网站建设联系电话电脑做网站软件
  • 送菜网站制作大丰企业做网站多少钱
  • 江苏建设招标网站网站建设备案优化设
  • 网站建好后如何上线wordpress接入api
  • 嘉定网站设计制作托管维护高端网站建设网站
  • 怎么在自己电脑上搭建网站wordpress 如何重新安装
  • 微信公众号优惠和网站绑定怎么做网站建设公司客户开发手册
  • 益阳市网站建设网站建设中文摘要是什么
  • 建设银行官网官方网站婚纱网站html源码
  • 建站网站案例网站建设骗
  • 智慧景区网站服务建设口碑好的定制网站建设公司
  • 七台河新闻联播最新aso优化
  • 网站设计公司网站设计郑州seo优化顾问阿亮
  • 沈阳网站建设哪家便宜新竹自助网站
  • 广州三合一网站建设网站建设公司的小程序选择什么
  • 网站建设属于资产站长之家的作用
  • 备案后怎么建设网站全屋整装十大公认品牌加盟
  • 成品网站源码68w68游戏wordpress优秀中文主题
  • 做网站加模块网站建设江西
  • 做网站 知乎怎么创建网站平台赚钱
  • 陕西省建设监理协会证书查询网站拼团购物网站开发
  • 帮站seo湖南湘潭
  • 深圳html5网站开发建立网站需要多久
  • 项目网站建设应入哪个科目营销型网站策划公司