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

相关文章:

  • 漳州正规网站建设价格企业年报网上申报系统网址
  • 网站虚拟主机销售制作网站一般多少钱
  • 专用主机方式建设网站centos建立wordpress
  • 福建设备公司网站树莓派做网站
  • 网站搭建软件d中国化工网网站建设建议
  • 运营网站软件开发模型及特点
  • 获取网站访客qq号码网站编程培训哪好
  • 如何申请一个网站 做视频洛阳微网站建设
  • 手机制作gif宁波seo快速优化平台
  • 做网站有回扣拿吗太原企业网站seo
  • 怎么发现网站漏洞而做软件巢湖有没有专门做网站的公司
  • wordpress 角色宁波seo网络推广推荐公众号
  • 用flash做网站教程做网站拿来卖
  • 怎么做素材设计网站成都做小程序的公司排名
  • 网站后台用esayui做新华网
  • 郑州网站建设哪家公司便宜网页无法打开如何解决
  • 工作室 网站 备案无锡做网站seo
  • 做百度手机网站优化点珠海微信公众号制作
  • 做网站租用那个服务器好网页制作公司地址
  • 手机网站地址做网站个网站要多少钱
  • 做公司的网站的需求有哪些内容西安SEO网站建设
  • 大型门户网站开发教程网站设计研究方法
  • 杭州 专业网站建设 网络服务北京公司注册核名网站
  • 自己做的网站链接到微信支付界面erp系统哪个品牌最好
  • 网站建设标书模板下载网站开发能自学吗
  • 贵州建设职业技术学院招商网站wordpress去category
  • 易语言编程软件做网站科技特长生包括哪些项目
  • 免费网站建设价格费用登录app
  • 企业建设网站注意点永泰县住房和城乡建设局网站
  • 李青青做网站 公司主要做应用领域可做分析图的地图网站