当前位置: 首页 > 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/14528618/

相关文章:

  • 建网站平台 优帮云国内效果图公司排名
  • 连云港公司网站优化服务石家庄网站推广报价
  • 毕业设计做音乐网站一个网站项目多少钱
  • 国外平面设计网站有哪些龙华做棋牌网站建设
  • 徐州市建设银行网站蓝色脚手架织梦企业网站模板
  • 网站编辑难做吗网站模板怎么样
  • 新云网站模板浙江金华市建设局网站
  • 软件介绍网站模板大连云app官方下载
  • 公司旅游视频网站模板免费下载wordpress列表分页代码
  • 品牌网站设计企业服务企业网站建设公司电话西安
  • WordPress插件代码化科学新概念seo外链
  • 网站设计及建设合同平湖市网站建设
  • 天津外贸公司网站制作wordpress本地浏览慢
  • 河北建设集团园林网站网站推广公司
  • 网站手机客户端生成网站有图片的验证码是怎么做的
  • 苏州建设网站专业哈尔滨网站设计公司哪家更好
  • 小程序是什么时候出来的外贸seo优化
  • 网站建设思维平面设计师要学哪些软件
  • 咸鱼网站做链接wordpress自定义文章参数
  • 江苏省品牌专业建设网站上海市建设安全协会网站查询系统瘫
  • 建站宝盒怎么样公司企业策划书模板
  • 西宁网站制作 青wordpress yusi主题
  • 怎么做建设网站首页天津网站建设哪家好
  • 忻州建设厅官方网站设置 iis 网站维护中
  • 小说网站开发 项目计划书成都网站建设的定位
  • 中山seo排名优化seo网站建设技巧
  • 珠海专业的免费建站东莞高端网站定制
  • 如何使用阿里云建站长沙有哪些设计公司
  • 上海松江建设银行网站wordpress制作婚礼
  • 在哪里创建网站网页升级访问永久你懂的