如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。 今天跟大家聊聊日常工作中,我都使用过哪些设计模式。...如何使用呢?...可以考虑责任链模式 2.2 责任链模式定义 当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式。 责任链模式为请求创建了一个接收者对象的链。...这种模式给予请求的类型,对请求的发送者和接收者进行解耦。 责任链模式实际上是一种处理请求的模式,它让多个处理器(对象节点)都有机会处理该请求,直到其中某个处理成功为止。...实际上,我们可以使用观察者模式优化。 4.2 观察者模式定义 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被完成业务的更新。
需要生成的产品对象的属性相互依赖,需要指定其生成顺序。 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。...由于观察者模式支持简单的广播通信,当消息更新时,会自动通知所有的观察者。 下面我们来看一下如何使用 TypeScript 来实现观察者模式。...策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活、可维护、可扩展。 ? 目前在一些主流的 Web 站点中,都提供了多种不同的登录方式。...,从而避免请求的发送者和接受者之间的耦合关系。...7.3 应用场景 可处理一个请求的对象集合应被动态指定。
观察者模式 特点:观察类设置监听器给被观察类,在观察类发生了监听器想监听的事件时,被观察类主动调用观察类的监听器。 使用场景:凡是需要关注事件的,都可以使用。 9....命令模式 特点: 发送者对象发送请求对象,接收者对象返回结果。请求对象内含实现方法(Runnable 算得上是一种命令模式?)。调用,接收和实现分散 在 3 个类中。...使用场景:一个请求一个响应的模式比较适合命令模式。 11. 责任链模式 特点:事件(请求)处理类(Handler)对象连成一条链,链的顺序表示优先级。事件到达时按优先级流水线处理。...使用场景:一个请求可能被多个不同的对象接收,但存在接收优先级时。如多层 UI 布局的点击事件。 12. 策略模式 特点:一个算法接口或类,被多个子类实现/继承。各个子类可以根据需求互相替换。...备忘录模式 特点:每一步都被记录,操作可还原。常见实现有 log 记录,merkle 树。 使用场景:当操作有回滚的需求时。
观察者模式适合应用场景 当一个对象状态的改变需要改变其他对象, 或实际对象是事先未知的或动态变化的时, 可使用观察者模式。 当你使用图形用户界面类时通常会遇到一个问题。...比如, 你创建了自定义按钮类并允许客户端在按钮中注入自定义代码, 这样当用户按下按钮时就会触发这些代码。 观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。...与其他模式的关系 责任链模式、命令模式、 中介者模式和观察者模式用于处理请求发送者和接收者之间的不同连接方式: 责任链按照顺序将请求动态传递给一系列的潜在接收者, 直至其中一名接收者对请求进行处理。...命令在发送者和请求者之间建立单向连接。 中介者清除了发送者和请求者之间的直接连接, 强制它们通过一个中介对象进行间接沟通。 观察者允许接收者动态地订阅或取消接收请求。...中介者和观察者 之间的区别往往很难记住。 在大部分情况下, 你可以使用其中一种模式, 而有时可以同时使用。 让我们来看看如何做到这一点。中介者的主要目标是消除一系列系统组件之间的相互依赖。
主要功能如下: 支持Get、Post、Put、Delete等任意请求方式,可自定义请求方式 支持Json、DOM等任意数据解析方式,可自定义数据解析器 支持文件下载/上传,及进度的监听,并且支持断点下载...看名字,我们可以理解为它就是一个请求发送者,通过一个from操作符,传入一个Param对象,然后返回一个RxJava的Observable对象,此时,我们就可以使用RxJava强大的操作符去处理相关的逻辑...接下来,我们来看看,如何发送Post请求、如何在Activity/Fragment销毁时,自动关闭为完成的请求、如何上传/下载文件及进度的监听、如何把Http返回的结果自动解析成我们想要的对象。...数据解析器Parser 在上面的案例中,观察者拿到数据类型都是String类型,然后现实开发中,我们经常需要对数据解析成我们想要的对象,RxHttp考虑到了这一点,现在我们就来看看如何的到我们想要的对象...最后,订阅观察者,开始发送请求 以上所有的案例都离不开这3个步骤。
这2个月出门面试的童鞋可注意不要中暑哦。...API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口 观察者模式 一个对象通过添加一个方法使本身变得可观察。...当可观察的对象更改时,它会将消息发送到已注册的观察者。...方法 – 在某个方法或输出之前执行或之后执行,用于修饰 迭代器模式 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类 – yield POST和GET有什么区别 GET...如何防范? CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。 防范 1. 合理规范api请求方式,GET,POST 2.
RxJava 简介 安装 RxJava 可观察对象、可流动对象、观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...在下面的部分中,我们将学习它的功能以及如何使用它。 可观察对象、可流动对象、观察者和订阅者 在 ReactiveX 中,观察者订阅一个可观察的对象。...,可以通过到达顺序(flatMap)、保持最后发射的顺序(switchMap)或通过保持原始顺序(concatMap)将给定的可观察对象转换为单个可观察对象:concatMap、concatMapDelayError...下面的示例演示了如何通过随机选择可观察对象的顺序来更改输出的内容。...第二个比较显示两个数组是相同的。 compare():按字典顺序比较两个数组。
API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口 观察者模式 一个对象通过添加一个方法使本身变得可观察。...当可观察的对象更改时,它会将消息发送到已注册的观察者。...方法 – 在某个方法或输出之前执行或之后执行,用于修饰 迭代器模式 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类 – yield POST和GET有什么区别 GET...是从服务器上获取数据,POST是向服务器传送数据 GET是通过发送HTTP协议通过URl参数传递进行接收,而POST是实体数据,通过表单提交 GET传送的数据量较小,不能大于2KB。...如何防范? CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。 防范 1. 合理规范api请求方式,GET,POST 2.
RxJava 简介 安装 RxJava 可观察对象、可流动对象、观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...在下面的部分中,我们将学习它的功能以及如何使用它。 可观察对象、可流动对象、观察者和订阅者 在 ReactiveX 中,观察者订阅一个可观察的对象。...它们被称为“可连接的”可观察对象,RxJava 拥有能够创建此类可观察对象的操作符。 RxJava2.0 引入了一种新的可观察类型,称为Flowable。...下面的示例演示了如何通过随机选择可观察对象的顺序来更改输出的内容。...我们学习了反应式编程抽象及其在 RxJava 中的实现。我们通过了解可观察对象、调度器和订阅是如何工作的、最常用的方法以及它们是如何使用的,从而通过具体的示例迈出了进入 RxJava 世界的第一步。
基本概念 Observable 可观察者, 生产数据 Observer 观察者, 消费数据 Subscription 订阅/可清理对象, 用以清理资源或中断Observeable执行 Subject 多播主体...请求状态管理器中的状态指 推送: 有生产者控制何时获取数据, 例如:向服务器请求数据 可观察者 Observable 基础创建 import { Observable } from 'rxjs'; const...观察者定义了如何处理数据或错误 观察者可配置三种数据处理方法 'next':正常处理 'error': 错误处理 'complete': 完成处理 const observer = { next...,下游将无法正常发送数据. concat 合并多个不同的流,按先后顺序输出 const a$ = range(0, 3) const b$ = range(10, 3) a$.contact(b$)....subscribe(...); // print 0 --- 1 --- 2 --- 10 --- 11 --- 12 concat 按顺序执行订阅,只有当一个内部Observable后再执行下一个Observable
适配器模式 将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口。 观察者模式 一个对象通过添加一个方法使本身变得可观察。...当可观察的对象更改时,它会将消息发送到已注册的观察者。例如实现实现消息推送——将所有类的实例化注册到一个数组,通过循环批量执行类。...迭代器模式 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类——yield。 POST和GET有什么区别?...GET是从服务器上获取数据,POST是向服务器传送数据 GET是通过发送HTTP协议通过URl参数传递进行接收,而POST是实体数据,通过表单提交 GET传送的数据量较小,不能大于2KB。...如何防范? CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。
CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。...CSRF防范: 1.合理规范api请求方式,GET,POST 2.对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。...观察者模式的应用,使用代码示例说明。 对象的一种一对多的关系,当依赖的对象状态发生改变时,所有依赖它的对象都得到通知并被自动更新。 观察者模式又称发布订阅模式。...1.抽象主体(Subject)角色:主体角色将所有对观察者对象的引用保存在一个集合中,每个主体可以有任意多个观察者。 抽象主体提供了增加和删除观察者对象的接口。主体也就是被观察者。...第一种慢的原因:在于 jQuery 内部使用各种选择器链条的选择顺序是从右到左,所以这条语句是先选.abc,然后再一个个过滤出父元素#content,这导致它慢很多。
语句,得到的只是一个代理对象,当用到其他字段的时候才会发送查询语句,session.get不管我们是否使用这个对象都会发送sql语句 xml XML解析的三种方式 sax:不需要读入整个文件就可以解析出文件内容...类索引,父类索引,接口索引) 字段表 方法表 属性表 网络编程 tcp如何保证可靠性 将数据分割为tcp认为适合发送的数据块 超时重传:当tcp发出一个数据段后,会启动一个定时器,等待目的端确认收取这个报文...:客户端请求Server的时候不知道Server返回的数据从什么地方来的,代理将请求分发到不同的服务器上 负载均衡 保证内网安全 nginx设置反向代理的五种方法 轮询(默认),每个请求按时间顺序逐一分配到不同的后端服务器...权重越大,轮询几率越大,用于后端服务器性能不均的情况。 ip 绑定 ip_path,每个请求按访问 ip 的哈希结果分配,这样每个客户固定访问一个服务器,可以解决 session 问题。...fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。 url_hash 按访问的 url 结果来分配请求,使每个 url 定位到同一个后端服务器。
本文主要来简单回顾一下之前写的一些内容。迭代器器模式介绍意图提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示。...详见: 漫谈模式之迭代器模式责任链模式介绍意图责任链的意图是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系。...ConcreteHandler处理它所负责的请求可访问它的后继者详见:漫谈模式之责任链模式解释器模式的基本介绍意图给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子...了解并维护它的各个同事Colleague(同事类)每一个同事类都知道它的中介者对象每一个同事对象在需与其他的同事通信的时候,与它的中介者通信参与者如何协作?同事向一个中介者对象发送和接收请求。...详见:漫谈模式之观察者模式命令的基本介绍意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
实现 KVO 键值观察模式,被观察的对象必须使用 KVC 键值编码来修 改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础。...有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?如果需要a、b、c、d顺序执行,该如何实现?...解释:要求顺序执行,那么可以将任务放到串行队列中,自然就是按顺序来异步执行了。 使用block有什么好处?...串行和并行:串行是多个任务按一定顺序执行,并行是多个任务同时执行; 代码是在分线程执行,在主线程嘟列中刷新UI。 多线程编程是防止主线程堵塞、增加运行效率的最佳方法。...HTTP协议的特点,关于HTTP请求GET和POST的区别 GET和POST的区别: HTTP超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。
实现 KVO 键值观察模式,被观察的对象必须使用 KVC 键值编码来修 改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础。...有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?如果需要a、b、c、d顺序执行,该如何实现?...解释:要求顺序执行,那么可以将任务放到串行队列中,自然就是按顺序来异步执行了。 使用block有什么好处?...串行和并行:串行是多个任务按一定顺序执行,并行是多个任务同时执行; 代码是在分线程执行,在主线程嘟列中刷新UI。 ** 多线程编程是防止主线程堵塞、增加运行效率的最佳方法。...HTTP协议的特点,关于HTTP请求GET和POST的区别 GET和POST的区别: HTTP超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。
命令模式的基本介绍 意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 结构 命令模式的基本结构如下: ?...责任链模式的基本介绍 意图 责任链的意图是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。...每一个同事对象在需与其他的同事通信的时候,与它的中介者通信。 参与者如何协作? 同事向一个中介者对象发送和接收请求。中介者在各同事间适当地转发请求以实现写作行为。 详见《中介者模式浅析》 6....1、Context将与状态相关的请求委托给当前的ConreteState对象处理 2、Context可将自身作为一个参数传递给处理该请求的状态对象。这使得状态对象在必要时可访问Context。...策略模式的基本介绍 意图 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。 结构 策略模式的基本结构如下: ?
它提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。...迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。..., value: undefined } 一个迭代器对象 ,知道如何每次访问集合中的一项, 并记录它的当前在序列中所在的位置。...SafeObserver - 更好的 Observer 上面的示例中,我们使用一个包含了 next、error、complete 方法的普通 JavaScript 对象来定义观察者。...生产者 消费者 pull拉 被请求的时候产生数据 决定何时请求数据 push推 按自己的节奏生产数据 对接收的数据进行处理 接下来我们来看张图,从而加深对上面概念的理解: ?
依赖注入的使用 创建可注入服务: import { Injectable } from '@angular/core'; // @Injectable()装饰器,是告诉Angular这是一个可供注入的服务...因此我们还需要在服务类中导入RxJS 可观察对象\color{#0abb3c}{可观察对象}可观察对象和可能会使用到的操作符\color{#0abb3c}{操作符}操作符。..._http.get(url, { params: { code, name } }); } 复制代码 发送数据到服务器 HttpClient.post() public postHttpResult...它是一个有三个回调函数的对象\color{#0abb3c}{对象}对象,每个回调函数对应三种Observable发送的通知类型(next, error, complete),observer表示的是对序列结果的处理方式..._goodsListService.getHttpResultTwo('12', 'zs')]) .subscribe(resArr => { // 此时的返回结果会被按顺序放在一个数组中
领取专属 10元无门槛券
手把手带您无忧上云