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

专做校园购物网站/农产品网络营销

专做校园购物网站,农产品网络营销,哪个网站可以做免费宣传,江苏省住房和建设部网站首页一、什么是观察者模式 观察者定义了一种一对多的依赖关系,当一个主题(Subject)对象状态发生变化时,所有依赖它的相关对象都会得到通知并且能够自动更新自己的状态,这些依赖的对象称之为观察者(Observer)对象这类似于发布/订阅模式。 观察者模…

一、什么是观察者模式

观察者定义了一种一对多的依赖关系,当一个主题(Subject)对象状态发生变化时,所有依赖它的相关对象都会得到通知并且能够自动更新自己的状态,这些依赖的对象称之为观察者(Observer)对象这类似于发布/订阅模式。

观察者模式中的主题对象,会维持着一个依赖它的观察者对象列表,当主题对象状态发生改变时,主题对象便会调用这个列表中所有观察者对象的方法。

观察者模式一般用在分布式时间处理系统,它也是流行的MVC模型的核心设计模式。

二、观察者模式中的角色

观察者模式主要涉及到三个组件:Subject、Observer、ConcreteObserver

  • 主题(Subject):保存了所有观察者的引用,并供注册、删除观察者的接口,提供自己状态变化触发所有观察者更新的方法
  • 观察者(Observer):定义了更新自己状态的接口
  • 具体观察者( ConcreteObserver):具体实现观察者接口,使自己的状态和主题状态一致

这里写图片描述

三、代码实例

1. 主题对象类

import java.util.ArrayList;
import java.util.List;
public class Subject {//主题对象维持着一个依赖它的观察者对象列表private List<Observer> observers = new ArrayList<Observer>();//主题对象的状态private int state;//当主题对象状态变化时,调用所有观察者对象的方法public void setState(int state) {this.state = state;notifyAllObservers();}//调用所有依赖它的观察者的方法public void notifyAllObservers(){for (Observer observer : observers) {observer.update(state);}}//主题对象也可以注册、和删除依赖它的观察者对象public void attach(Observer observer){observers.add(observer);}public int getState() {return state;}
}

2. 观察者接口

public abstract class Observer {public abstract void update(int state);
}

3. 具体的观察者

public class ConcreteObserverA extends Observer{@Overridepublic void update(int state) {System.out.println( "ConcreteObserverA get state change event: " + state );}
}
public class ConcreteObserverB extends Observer{@Overridepublic void update(int state) {System.out.println( "ConcreteObserverA get state change event: " + state );}
}

最后写一个测试类测试一下

public class ObserverPatternDemo {public static void main(String[] args) {//初始化主题对象Subject subject = new Subject();//注册观察者对象到主题对象ConcreteObserverA ConcreteObserverA=new ConcreteObserverA();ConcreteObserverB ConcreteObserverB=new ConcreteObserverB();subject.attach(ConcreteObserverA);subject.attach(ConcreteObserverB);//主题对象状态发生变化subject.setState(20);}
}

我们看一下运行结果:

ConcreteObserverA get state change event: 20
ConcreteObserverA get state change event: 20

当主题对象状态发生改变,两个注册的观察者都收到了通知。

四、总结

其实观察者模式很简单,其核心内涵依然是用面向对象思想思考问题而非面向过程思想,面向接口编程,解耦合依赖。

但是观察者模式也有缺点,观察者模式是一种常用的链式触发机制,由于是链式触发,当观察者比较多的时候,性能问题是比较令人担忧的。并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死。

http://www.lbrq.cn/news/1057051.html

相关文章:

  • 网上做网站怎么赚钱/广州百度竞价托管
  • 合肥装饰公司做的好的网站/利于seo的建站系统有哪些
  • 工商管理局注册查询/谷歌seo详细教学
  • 网站设计团队/今天实时热搜榜排名
  • 微信链接网页网站制作/seo薪酬水平
  • 商城网站建设方案书/南宁seo手段
  • 网站定位与功能分析/武汉seo认可搜点网络
  • 新疆网站开发哪家好/抖音seo点击软件排名
  • 张掖网站建设培训/seo的名词解释
  • 35互联做的网站后台怎样登录/网络推广专员是做什么的
  • wordpress 换数据库/杭州最好的seo公司
  • 网站权重多少4/谷歌浏览器中文手机版
  • 网站建设的整个流程图/dz论坛如何seo
  • 建设银行短信带网站/冯耀宗seo
  • 邯郸网站建设维护/武威网站seo
  • 个人网站搭建平台/重庆网站网络推广
  • 中企动力科技做什么的/重庆百度seo排名
  • 湖南网站设计企业/深圳谷歌网络推广公司
  • 做网站的公司/微信推广引流加精准客户
  • 有没有清仓处理的网站/google搜索引擎免费入口
  • 上海网站建设备案号怎么恢复/一站式网络营销
  • 怎么做产品的网站/百度推广助手
  • 网站建设与推广实训小结/搜索引擎收录查询
  • 西安网络建设公司/北京网站优化排名
  • adobe photoshop/搜外seo
  • 麦云短链接/seo图片优化
  • 网站建设公司新/网站排名查询
  • 深圳东门步行街图片/网站seo站长工具
  • 上市公司做网站有什么用/google国外入口
  • 网站空间租用续费服务合同/软件拉新推广平台
  • MATLAB深度学习之数据集-数据库构建方法详解
  • 【关于Java的泛型(基础)】
  • Chrontel昆泰-【CH7036A-BF】CH7036 LVDS to HDMI/VGA/LVDS Converter
  • 在AI时代,如何制定有效的职业规划?AI时代职业规划+AI产品经理角色
  • MongoDB 从3.4.0升级到4.0.0完整指南实战-优雅草蜻蜓I即时通讯水银版成功升级-卓伊凡|bigniu
  • Sklearn 机器学习 数据聚类 层次聚类的两个重要属性