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

实战!工作中常用到哪些设计模式

如何在写代码中找到乐趣呢,我觉得,最好方式就是:使用设计模式优化自己业务代码。 今天跟大家聊聊日常工作中,我都使用过哪些设计模式。...如何使用呢?...可以考虑责任链模式 2.2 责任链模式定义 当你想要让一个以上对象有机会能够处理某个请求时候,就使用责任链模式。 责任链模式为请求创建了一个接收者对象链。...这种模式给予请求类型,对请求发送者和接收者进行解耦。 责任链模式实际上是一种处理请求模式,它让多个处理器(对象节点)都有机会处理该请求,直到其中某个处理成功为止。...实际上,我们可以使用观察者模式优化。 4.2 观察者模式定义 观察者模式定义对象一种一对多依赖关系,当一个对象状态发生改变时,所有依赖于它对象都得到通知并被完成业务更新。

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

Java 设计模式总结

观察者模式 特点:观察类设置监听器给被观察类,在观察类发生了监听器想监听事件时,被观察类主动调用观察监听器。 使用场景:凡是需要关注事件,都可以使用。 9....命令模式 特点: 发送对象发送请求对象,接收者对象返回结果。请求对象内含实现方法(Runnable 算得上是一种命令模式?)。调用,接收和实现分散 在 3 个类中。...使用场景:一个请求一个响应模式比较适合命令模式。 11. 责任链模式 特点:事件(请求)处理类(Handler)对象连成一条链,链顺序表示优先级。事件到达时优先级流水线处理。...使用场景:一个请求可能被多个不同对象接收,但存在接收优先级时。如多层 UI 布局点击事件。 12. 策略模式 特点:一个算法接口或类,被多个子类实现/继承。各个子类可以根据需求互相替换。...备忘录模式 特点:每一步都被记录,操作还原。常见实现有 log 记录,merkle 树。 使用场景:当操作有回滚需求时。

57520

2023 跟我一起学设计模式:观察者模式

观察者模式适合应用场景 当一个对象状态改变需要改变其他对象, 或实际对象是事先未知或动态变化时, 可使用观察者模式。 当你使用图形用户界面类时通常会遇到一个问题。...比如, 你创建了自定义按钮类并允许客户端在按钮中注入自定义代码, 这样当用户下按钮时就会触发这些代码。 观察者模式允许任何实现了订阅者接口对象订阅发布者对象事件通知。...与其他模式关系 责任链模式、命令模式、 中介者模式和观察者模式用于处理请求发送者和接收者之间不同连接方式: 责任链按照顺序请求动态传递给一系列潜在接收者, 直至其中一名接收者对请求进行处理。...命令在发送者和请求者之间建立单向连接。 中介者清除了发送者和请求者之间直接连接, 强制它们通过一个中介对象进行间接沟通。 观察者允许接收者动态地订阅或取消接收请求。...中介者和观察者 之间区别往往很难记住。 在大部分情况下, 你可以使用其中一种模式, 而有时可以同时使用。 让我们来看看如何做到这一点。中介者主要目标是消除一系列系统组件之间相互依赖。

17130

RxHttp 一条链发送请求,新一代Http请求神器(一)

主要功能如下: 支持Get、Post、Put、Delete等任意请求方式,自定义请求方式 支持Json、DOM等任意数据解析方式,自定义数据解析器 支持文件下载/上传,及进度监听,并且支持断点下载...看名字,我们可以理解为它就是一个请求发送者,通过一个from操作符,传入一个Param对象,然后返回一个RxJavaObservable对象,此时,我们就可以使用RxJava强大操作符去处理相关逻辑...接下来,我们来看看,如何发送Post请求如何在Activity/Fragment销毁时,自动关闭为完成请求如何上传/下载文件及进度监听、如何把Http返回结果自动解析成我们想要对象。...数据解析器Parser 在上面的案例中,观察者拿到数据类型都是String类型,然后现实开发中,我们经常需要对数据解析成我们想要对象,RxHttp考虑到了这一点,现在我们就来看看如何到我们想要对象...最后,订阅观察者,开始发送请求 以上所有的案例都离不开这3个步骤。

84030

Java 设计模式最佳实践:6~9

RxJava 简介 安装 RxJava 可观察对象流动对象观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...在下面的部分中,我们将学习它功能以及如何使用它。 可观察对象流动对象观察者和订阅者 在 ReactiveX 中,观察者订阅一个可观察对象。...,可以通过到达顺序(flatMap)、保持最后发射顺序(switchMap)或通过保持原始顺序(concatMap)将给定观察对象转换为单个可观察对象:concatMap、concatMapDelayError...下面的示例演示了如何通过随机选择可观察对象顺序来更改输出内容。...第二个比较显示两个数组是相同。 compare():字典顺序比较两个数组。

1.7K10

初中级PHP面试基础汇总

API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口 观察者模式 一个对象通过添加一个方法使本身变得可观察。...当可观察对象更改时,它会将消息发送到已注册观察者。...方法 – 在某个方法或输出之前执行或之后执行,用于修饰 迭代器模式 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类 – yield POST和GET有什么区别 GET...是从服务器上获取数据,POST是向服务器传送数据 GET是通过发送HTTP协议通过URl参数传递进行接收,而POST是实体数据,通过表单提交 GET传送数据量较小,不能大于2KB。...如何防范? CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。 防范 1. 合理规范api请求方式,GET,POST 2.

1.3K10

Java 设计模式最佳实践:六、让我们开始反应式吧

RxJava 简介 安装 RxJava 可观察对象流动对象观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...在下面的部分中,我们将学习它功能以及如何使用它。 可观察对象流动对象观察者和订阅者 在 ReactiveX 中,观察者订阅一个可观察对象。...它们被称为“连接”可观察对象,RxJava 拥有能够创建此类可观察对象操作符。 RxJava2.0 引入了一种新观察类型,称为Flowable。...下面的示例演示了如何通过随机选择可观察对象顺序来更改输出内容。...我们学习了反应式编程抽象及其在 RxJava 中实现。我们通过了解可观察对象、调度器和订阅是如何工作、最常用方法以及它们是如何使用,从而通过具体示例迈出了进入 RxJava 世界第一步。

1.7K20

Rx.js 入门笔记

基本概念 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

2.9K10

初中级 PHP 面试基础汇总

适配器模式 将不同接口适配成统一API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口。 观察者模式 一个对象通过添加一个方法使本身变得可观察。...当可观察对象更改时,它会将消息发送到已注册观察者。例如实现实现消息推送——将所有类实例化注册到一个数组,通过循环批量执行类。...迭代器模式 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类——yield。 POST和GET有什么区别?...GET是从服务器上获取数据,POST是向服务器传送数据 GET是通过发送HTTP协议通过URl参数传递进行接收,而POST是实体数据,通过表单提交 GET传送数据量较小,不能大于2KB。...如何防范? CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。

1.1K20

php基础(一)

CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。...CSRF防范: 1.合理规范api请求方式,GET,POST 2.对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交时候服务端进行验证随机码是否相同。...观察者模式应用,使用代码示例说明。 对象一种一对多关系,当依赖对象状态发生改变时,所有依赖它对象都得到通知并被自动更新。 观察者模式又称发布订阅模式。...1.抽象主体(Subject)角色:主体角色将所有对观察对象引用保存在一个集合中,每个主体可以有任意多个观察者。 抽象主体提供了增加和删除观察对象接口。主体也就是被观察者。...第一种慢原因:在于 jQuery 内部使用各种选择器链条选择顺序是从右到左,所以这条语句是先选.abc,然后再一个个过滤出父元素#content,这导致它慢很多。

2.1K20

Java面试基本知识

语句,得到只是一个代理对象,当用到其他字段时候才会发送查询语句,session.get不管我们是否使用这个对象都会发送sql语句 xml XML解析三种方式 sax:不需要读入整个文件就可以解析出文件内容...类索引,父类索引,接口索引) 字段表 方法表 属性表 网络编程 tcp如何保证可靠性 将数据分割为tcp认为适合发送数据块 超时重传:当tcp发出一个数据段后,会启动一个定时器,等待目的端确认收取这个报文...:客户端请求Server时候不知道Server返回数据从什么地方来,代理将请求分发到不同服务器上 负载均衡 保证内网安全 nginx设置反向代理五种方法 轮询(默认),每个请求按时间顺序逐一分配到不同后端服务器...权重越大,轮询几率越大,用于后端服务器性能不均情况。 ip 绑定 ip_path,每个请求访问 ip 哈希结果分配,这样每个客户固定访问一个服务器,可以解决 session 问题。...fair(第三方)后端服务器响应时间来分配请求,响应时间短优先分配。 url_hash 访问 url 结果来分配请求,使每个 url 定位到同一个后端服务器。

70200

漫谈模式之行为模式小结

本文主要来简单回顾一下之前写一些内容。迭代器器模式介绍意图提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象内部表示。...详见: 漫谈模式之迭代器模式责任链模式介绍意图责任链意图是使多个对象都有机会处理请求,从而避免请求发送者和接收者之前耦合关系。...ConcreteHandler处理它所负责请求访问它后继者详见:漫谈模式之责任链模式解释器模式基本介绍意图给定一个语言,定义它文法一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中句子...了解并维护它各个同事Colleague(同事类)每一个同事类都知道它中介者对象每一个同事对象在需与其他同事通信时候,与它中介者通信参与者如何协作?同事向一个中介者对象发送和接收请求。...详见:漫谈模式之观察者模式命令基本介绍意图将一个请求封装为一个对象,从而使你可用不同请求对客户进行参数化;对请求排队或记录请求日志,以及支持撤销操作。

31930

iOS两年前面试题总结,现在你掌握了嘛?

实现 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超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。

1.1K20

iOS,面试必看,最全梳理

实现 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超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。

1.2K30

设计模式之行为模式集合

命令模式基本介绍 意图 将一个请求封装为一个对象,从而使你可用不同请求对客户进行参数化;对请求排队或记录请求日志,以及支持撤销操作。 结构 命令模式基本结构如下: ?...责任链模式基本介绍 意图 责任链意图是使多个对象都有机会处理请求,从而避免请求发送者和接收者之前耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。...每一个同事对象在需与其他同事通信时候,与它中介者通信。 参与者如何协作? 同事向一个中介者对象发送和接收请求。中介者在各同事间适当地转发请求以实现写作行为。 详见《中介者模式浅析》 6....1、Context将与状态相关请求委托给当前ConreteState对象处理 2、Context可将自身作为一个参数传递给处理该请求状态对象。这使得状态对象在必要时访问Context。...策略模式基本介绍 意图 定义一系列算法,把它们一个个封装起来,并且使它们相互替换。策略模式使得算法独立于使用客户而变化。 结构 策略模式基本结构如下: ?

78130

RxJS Observable

它提供一种方法顺序访问一个聚合对象各个元素,而又不需要暴露该对象内部表示。...迭代器模式可以把迭代过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象内部构造,也可以顺序访问其中每个元素。..., value: undefined } 一个迭代器对象 ,知道如何每次访问集合中一项, 并记录它的当前在序列中所在位置。...SafeObserver - 更好 Observer 上面的示例中,我们使用一个包含了 next、error、complete 方法普通 JavaScript 对象来定义观察者。...生产者 消费者 pull拉 被请求时候产生数据 决定何时请求数据 push推 自己节奏生产数据 对接收数据进行处理 接下来我们来看张图,从而加深对上面概念理解: ?

2.4K20

Angular进阶教程2-

依赖注入使用 创建注入服务: 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 => { // 此时返回结果会被顺序放在一个数组中

4.1K30
领券