首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【译】在正确的线程上观察

首先,让我们梳理清晰,在RxJava中.subsribeOn( )和.observeOn( )区别: .subsribeOn( )操作符可以改变Observable应该在哪个调度器上执行任务。....observeOn( )操作符可以改变Observable将在哪个调度器上发送通知。 另外,你需要知道,默认情况下,链上的操作符将会在调用.subsribeOn( )的那个线程上执行任务。...调用 .subscribeOn( ) 尽管代码片段在主线程中,但是整个代码块将运行在.subscribeOn( )定义的线程上: Observable.just(1,2,3) .subscribeOn...调用 .observeOn( ) 如果你的代码片段在主线程中,默认情况下Observable的创建是在.subscribeOn( )定义的线程上,但是,调用.observeOn( )之后,余下的代码将会执行在....observeOn( )所定义的线程上: Observable.just(1,2,3) .observeOn(Schedulers.newThread()) .subscribe(); ?

51520

面向对象的代码风格(上)

首先是因为有编译器的维护,虚表更不容易出错。其次是使用者定义接口和子类,这种代码比跟有利于需求领域的建模,从而方便未来的维护人员。设计模式中的策略模式,本质上就是利用多态配置不同情况下运行不同的代码。...服务器端系统的输入基本上只有一种,就是协议包。 因此系统由针对多种协议包处理的模块组合而成。初始化系统的工作,就是搭建这些模块。...在网络上,这两种模型的争论非常激烈,依我来看,失血模型是不符合“封装”这个面向对象特征的。...,无需额外学习),然后就可以直接调用这个对象上的任何方法,来操作文件了。...这个对象本身也代表了在操作系统中打开的这个文件句柄。这些操作完全没有任何组合、顺序上的要求。

1.3K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议

    ----     上一节我们了解 RPC 的经典模型和设计要点,并用最早期的 ONC RPC 为例子,详述了具体的实现。...最后,ONC RPC 的设计明显是面向函数的,而非面向对象。而当前面向对象的业务逻辑设计与实现方式已经成为主流。     这一切的根源就在于压缩。这就像平时我们爱用缩略语。...只要用简单的处理,就不会出现错误。     另外,这种表述方式显然是描述一个订单对象的,是一种面向对象的、更加接近用户场景的表示方式。     ...传输协议问题     我们先解决第一个,传输协议的问题。     基于 XML 的最著名的通信协议就是SOAP了,全称简单对象访问协议(Simple Object Access Protocol)。...小结 原来的二进制 RPC 有很多缺点,格式要求严格,修改过于复杂,不面向对象,于是产生了基于文本的调用方式——基于 XML 的 SOAP; SOAP 有三大要素:协议约定用 WSDL、传输协议用 HTTP

    1.2K10

    jQuery源码研究:jQuery原型对象上的属性方法(上)

    ,在其原型上定义了一些属性和方法,同时其原型也被指向jQuery对象的属性fn上面。...至于定义的方法,下面一个个来看。首先需要明确,这些方法都是jQuery实例对象的方法;其次对于js中call的作用要有深刻的理解,才不会看晕。...toArray方法:返回一个包含jQuery对象集合中的所有DOM元素的数组。这个方法不接收任何参数。所有匹配的DOM节点都会包含在一个标准的数组中。...通过this把老的jQuery原型对象挂载到新建的ret对象的prevObject属性上云,这可以看作是jQuery对象的一个引用吧 7 ret.prevObject = this;...这个方法其实作用就是把元素集合添加到一个新的对象中,并且这个对象还具有jQuery对象的引用,所以也就是具有jQuery对象的所有方法和属性,链式调用起来妥妥的呀。

    1.1K40

    在对象的原型上添加方法?

    研究了几天,也算是得出一些基本的结论。本文除了讨论“在对象的原型上添加方法”好还是坏之外,也会为大家分享一个干货,是利利自己写的“复制”变量的方法。一起来看吧~!...本文主要内容 1 “复制”/“克隆”数组的功能需求 2 在对象的原型上添加方法是否合理?...在对象的原型上添加方法是否合理? 仔细思考之后,并查阅了一些相关资料,利利最终还是放弃了将方法添加到对象的原型上,为什么呢?...1 防止冲突 我们可以想象,如果仅仅由我们一个人开发项目时,是不会出现什么冲突问题的,但是,如果参与项目的人不止一个,那么我在对象上定义一个方法,别人是不是也可以在对象上定义一个方法呢?...“复制”各类变量的功能封装 虽然放弃了将变量“复制”的功能放在原型上,但是依旧打算对这个功能进行一些扩展,封装一个能够克隆数字、字符串、数组、对象等多种数据的功能函数,岂不是更好?

    99650

    面向协议编程与 Cocoa 的邂逅 (上)

    因为全部内容比较长,所以分成了上下两个部分,本文 (上) 主要介绍了一些理论方面的内容,包括面向对象编程存在的问题,面向协议的基本概念和决策模型等,下半部分主要展示了一些笔者日常使用面向协议思想和 Cocoa...protocol 是 Swift 语言的底座,语言的其他部分正是在这个底座上组织和建立起来的。这和我们熟知的面向对象的构建方式很不一样。...所谓协议,就是一组属性和/或方法的定义,而如果某个具体类型想要遵守一个协议,那它需要实现这个协议所定义的所有这些内容。协议实际上做的事情不过是“关于实现的约定”。...2.2 面向对象 在深入 Swift 协议的概念之前,我想先重新让大家回顾一下面向对象。相信我们不论在教科书或者是博客等各种地方对这个名词都十分熟悉了。...不过稍安勿躁,我们还有其他科技可以解决这个问题,那就是协议扩展。协议本身并不是很强大,只是静态类型语言的编译器保证,在很多静态语言中也有类似的概念。

    60420

    4.1 服务器上的 Git - 协议

    在本章第一节将介绍可用的协议以及各自优缺点。 下面一节将解释使用那些协议的典型设置及如何在你的服务器上运行。...指定 file:// 的主要目的是取得一个没有外部参考(extraneous references)或对象(object)的干净版本库副本– 通常是在从其他版本控制系统导入后或一些类似情况(参见 Git...对非资深的使用者,或者系统上缺少 SSH 相关程序的使用者,HTTP 协议的可用性是主要的优势。 与 SSH 协议类似,HTTP 协议也非常快和高效。...你也可以在 HTTPS 协议上提供只读版本库的服务,如此你在传输数据的时候就可以加密数据;或者,你甚至可以让客户端使用指定的 SSL 证书。...另一个好处是 HTTP/S 协议被广泛使用,一般的企业防火墙都会允许这些端口的数据通过。 缺点 在一些服务器上,架设 HTTP/S 协议的服务端会比 SSH 协议的棘手一些。

    1.3K40

    Python如何设计面向对象的类(上)

    Python是一门高级语言,支持面向对象设计,如何设计一个符合Python风格的面向对象的类,是一个比较复杂的问题,本文提供一个参考,表达一种思路,探究一层原理。...目标 期望实现的类具有以下基本行为: __repr__ 为repr()提供支持,返回便于开发者理解的对象字符串表示形式。 __str__ 为str()提供支持,返回便于用户理解的对象字符串表示形式。...__bytes__ 为bytes()提供支持,返回对象的二进制表示形式。 __format__ 为format()和str.format()提供支持,使用特殊的格式代码显示对象的字符串表示形式。...小结 本文先介绍了如何实现特殊方法来设计一个Python风格的类,然后分别实现了格式化显示与可散列对象,使用__slots__能为类节省内存,最后讨论了类属性覆盖技术,子类覆盖是Django基于类的视图大量用到的技术...参考资料: 《流畅的Python》第9章 符合Python风格的对象 https://www.jianshu.com/p/7fc0a177fd1f

    93930

    Java 对象的初始化过程_上

    前言 本文主要以白话的形式 ‘简单’ 的描述在 java 中 new 对象的过程,之所以说是 ‘简单’ 的描述是因为,在本文中不会讲述底层的加载过程。...实际上编译后多个静态代码块中的代码,会按编写时的顺序整合到一个静态代码块。 构造代码块 实际上源代码在被编译后,构造代码块中的代码就会被复制移动到构造方法代码的前面,也就会随着构造方法的运行而运行。...适用场景: 一个类,它不管创建多少个实例对象,都需要执行相同的初始化代码。 你的类有n个构造方法,而每个构造方法都需要执行相同的初始化代码。...,编译后的代码,和咱写的代码有点区别: 编译器自动帮我曾加了一个默认的,空参数的构造函数。...编译器删除了构造代码块,并将被删除的构造代码块中的代码,复制移动到每一个构造函数代码的最前面 编译器会将多个静态代码块中的代码,整合到一个静态代码块执行。

    66020

    程序员面试闪充 -- KVC&KVO

    KVC的操作方法由NSKeyValueCoding协议提供,而NSObject就实现了这个协议,也就是说OC中几乎所有的对象都支持KVC操作,常用的KVC操作方法如下: 动态设置:setValue:属性值...在OC中要实现KVO则必须要实现NSKeyValueObServing协议,不过幸运的是NSObject已经实现了该协议,因此几乎所有的OC对象都能使用KVO。...在上面KVC的案例上继续扩展。当账户余额balance变动之后用户总会希望可以及时获得通知的。那么此时就将account作为监听对象,需要Person为它注册监听。...但由于KVC不会对键和键路径进行错误检查,所以编译器无法检测错误。而且使用KVC后的执行效率要低于合成存取器,因为使用KVC必须先解析字符串,然后再设置或服务对象的实例变量。...将Model层的变化,通知到多个Controller对象时,可以使用NSNotification;如果是只需要观察某个对象的某个属性,可以使用KVO。

    753110

    基于 FPGA 的模拟 I²C协议设计(上)

    除此之外,由于 I²C 协议占用的 IO 资源特别少,连接方便,所以工程中也常选用 I²C 接口做为不同芯片间的通信协议。...I²C 串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到 I²C 总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。...1998 年当推出 I²C 总线协议 2.0 版本时,I²C 协议实际上已经成为一个国际标准。 在进行 FPGA 设计时,经常需要和外围提供 I²C 接口的芯片通信。...100kbit/s,快速模式下可达400kbit/s,高速模式下可达 3.4Mbit/s; • 片上的滤波器可以滤去总线数据线上的毛刺波,保证数据完整; • 连接到相同总线的 IC 数量只受到总线的最大电容...总线不仅仅是互连的线,还包含系统通信的所有格式和过程。I²C 总线结构上的特点保证了其应用时的简洁,另外其完备的协议避免了所有混乱、数据丢失和妨碍信息的可能性。 ?

    38510

    【地铁上的设计模式】--行为型模式:观察者模式

    什么是观察者模式 观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间一对多的依赖关系,当一个对象状态发生改变时,其所有依赖者都会收到通知并自动更新。...在客户端调用中,首先创建了一个被观察者对象,然后创建了两个观察者对象并将它们注册到被观察者对象中,最后调用了被观察者对象的 notifyObservers 方法来通知观察者对象。...ConcreteObserver 是具体的观察者类,实现了 IObserver 接口,并维护了观察者的状态和主题对象。...Client 是客户端代码,创建了具体的主题和观察者对象,并进行了观察者的注册和通知操作。...总结 观察者模式是一种行为设计模式,它允许对象之间建立一种一对多的关系,当一个对象状态发生改变时,所有依赖它的对象都会得到通知并自动更新。

    28730

    探秘Java:一个对象的生成(上)

    这也就意味着,Java程序的编写实际上就是定义和操作各种不同类型的对象。而为了更好的定义和操作这些对象,我们就需要全面的了解一下对象生成的过程。   ...2.1 类加载检查   对于JVM来说,实际执行的程序并不是开发人员编写的Java源码,而是经过编译器编译之后的二进制字节码(.class文件)。...在编译new关键字时,javac编译器会将new关键字编译成如下字节码指令:   当JVM开始执行new指令时会首先检查是否能够依据当前指令的参数(即上图中的instances/Person)在常量池中寻找到目标类的一个符号引用...“补充:仔细观察我们日常的代码可以发现,上面的这行代码只会出现在方法体中,而在方法体中的变量都会存在于虚拟机栈的本地变量表中,而使用new关键字创建对象实例则会存储在堆当中。...使用直接指针访问对象数据 :对象内存布局中本身就包含了对象类型数据指针,此时person变量存储的实际上就是对象的实际地址。

    52550

    Python 工匠:写好面向对象代码的原则(上)

    花下猫语:今天继续给大家分享一篇好文章,有助于 Python 进阶的。Python 是一门支持面向对象的语言,但它跟典型的面向对象语言不完全相同。如何在 Python 中写出良好的面向对象代码呢?...比如它 没有严格的类私有成员,没有接口(Interface)对象 等。 而与此同时,Python 灵活的函数对象、鸭子类型等许多动态特性又让一些在其他语言中很难做到的事情变得非常简单。...class Post: """HN(https://news.ycombinator.com/) 上的条目 :param title: 标题 :param link: 链接...在使用了一段时间之后,用户(还是我)觉得每次抓取到的内容有点不合口味。我其实只关注那些来自特定网站,比如 github 上的内容。...HNTopPostsSpider 类的代码,只需要不断在它的基础上创建新的子类就能完成新需求。

    98520

    【C++篇】类与对象的秘密(上)

    本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。 一、类的定义 在C++中,类通过将数据和行为封装在一起,模拟现实世界中的对象。...类的定义通常包含成员变量(描述对象的状态)和成员函数(定义对象的行为)。类的定义使用class关键字,并以分号结束。...capacity = n; top = 0; } ​ int main() { Stack st; st.Init(); return 0; } 通过使用Stack::Init,编译器可以知道...2.2 对象的大小与内存对齐 对象的大小由成员变量决定,成员函数不影响对象的大小。 类实例化出的每个对象,都有独⽴的数据空间,所以对象中肯定包含成员变量,那么成员函数是否包含呢?...这⾥需要再额外哆嗦⼀下, 其实函数指针是不需要存储的,函数指针是⼀个地址,调⽤函数被编译成汇编指令[call 地址], 其实编译器在编译链接时,就要找到函数的地址,不是在运⾏时找 ,只有动态多态是在运⾏

    13110

    【Java】面向对象的特征之一:封装(上)

    封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开的接口和对象进行交互(对类进行包装,将一些细节隐藏起来,提供一些公开访问的东西就可以)。...他们范围中的包的是什么? 4.包 1.什么是包? 包:为了更好的管理类,把多个类收集在一起,成为软件包。同一个类也可以根据不同属性再次进行组合。包的本质就是文件夹。...我们要使用这个类就要将他们的路径写出来。 推荐第一种,第二种写的有点长 推荐第一种:指定导入的类名,为什么? 2.如果在不同的包中有相同的类的情况: 如果遇到相同类不同包,java.util....*这样写法无法使用 ; 你使用的时候也不知道使用的是这个包的哪一个类 ; 也可以使用import static导入包中的静态的方法和字段 import static java.lang.Math.*...首先在Test_0716类中写出Test2,编译器会自动显示,Test2在那个包下,点击,会自动声明 其次就是进行类的实例化以及使用和平常没有区别 3.自定义包 步骤:

    11010

    房上的猫:类和对象>万物皆对象

    众所周知:java是一门面向对象的编程语言 本章将介绍基础的类和对象 一.对象  对象是用来描述客观事物的一个实体,由一组属性和方法构成 二.封装  封装就是把一个事物包装起来,并尽可能隐藏内部细节 三....类  类定义了对象将会拥有的特征(属性)和行为(方法)  类的属性:   对象拥有的静态特征在类中表示时称为类的属性  类的方法:   对象执行的操作称为类的方法 四.类和对象的关系 ?  ...类和对象的关系是抽象和具体的关系  类是对象的类型,对象是类的实例  对象的属性和方法被共同封装在类中,相辅相成,不可分割 五.java的类模板  1.语法: pubilc class {...  通过在类中定义方法来描述类所具有的行为,这些方法称为类的成员方法 六.创建和使用对象  类的作用就是创建对象,称为类的实例化过程  一个实例也就是一个对象,一个类可以生成多个对象  1.创建对象语法...:   类名 对象名 = new 类名();   //在创建类的对象时,需要使用java的new关键字  2.引用对象语法:   对象名.属性  //引用对象的属性   对象名.方法名(); //引用对象的方法

    96770

    迷乱的通信协议之IIC时序分析(上)

    想了很久,今天还是决定把IIC协议进行重新理解下,并进行记录与分享,自从大一跟着学长学过一次该协议后,之后需要用到该协议的时候,更多的是去找现成的对应的驱动代码 ,而不是自己根据芯片手册老老实实的编写,...虽然节省了很多时间,但是随着时间的加长,再加上平常也没怎么去注意内部的一些时序跳动,导致了该协议的一些原理都已经忘却,对于本人来说,这是个捡芝麻丢西瓜的领悟,所以打算在接下来的一段时间对基础的的一些串行协议重新进行详细的分析...介绍完了IIC,现在对它的一些时序进行了解,就用AT24C02进行来进行吧,因为最开始我进行学习的时候记得也是用的这款系列的芯片,以下讲解的时序图来自24C02的芯片手册。...1、IIC的起始信号与停止信号 作用简介: 起始信号的作用是让在IIC总线上的从设备检测到,然后明白主机要准备给它发送数据了; 停止信号的作用是给正在进行的IIC通信发送一个结束的信号,让它停下,该休息了...——等待响应—……—第n次写入八位数据——等待响应——发出停止信号 未完待续 今天由于时间问题就先讲到这了,等明天再继续对读操作的时序进行分析,有兴趣的朋友可以自行先了解,然后明天再看我讲的,看理解上是否有什么差别

    1.5K20

    基于FPGA的模拟 I²C协议系统设计(上)

    基于FPGA的模拟 I²C协议系统设计(上) 今天给大侠带来基于FPGA的 模拟 I²C 协议设计,由于篇幅较长,分三篇。今天带来第一篇,上篇, I²C 总线解析以及模拟 I²C 接口程序的基本框架。...I²C 串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到 I²C 总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。...1998 年当推出 I²C 总线协议 2.0 版本时,I²C 协议实际上已经成为一个国际标准。 在进行 FPGA 设计时,经常需要和外围提供 I²C 接口的芯片通信。...100kbit/s,快速模式下可达400kbit/s,高速模式下可达 3.4Mbit/s; 片上的滤波器可以滤去总线数据线上的毛刺波,保证数据完整; 连接到相同总线的 IC 数量只受到总线的最大电容(...总线不仅仅是互连的线,还包含系统通信的所有格式和过程。I²C 总线结构上的特点保证了其应用时的简洁,另外其完备的协议避免了所有混乱、数据丢失和妨碍信息的可能性。

    62411
    领券