| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 观察者模式的实际应用 -> 正文阅读 |
|
[网络协议]观察者模式的实际应用 |
前言设计模式不管是在面试还是工作中都会遇到,但我经常碰到小伙伴抱怨实际工作中自己应用设计模式的机会非常小。 正好最近工作中遇到一个用 背景如下: 在用户创建完订单的标准流程中需要做额外一些事情: 同时这些业务也是不固定的,随时会根据业务发展增加、修改逻辑。 如果直接将逻辑写在下单业务中,这一 当然也有其他方案,比如可以启动几个定时任务,定期扫描扫描订单然后实现自己的业务逻辑;但这样会浪费许多不必要的请求。 观察者模式因此观察者模式就应运而生,它是由事件发布者在自身状态发生变化时发出通知,由观察者获取消息实现业务逻辑。 这样事件发布者和接收者就可以完全解耦,互不影响;本质上也是对开闭原则的一种实现。 示例代码先大体看一下观察者模式所使用到的接口与关系:
接下来看看创建订单过程中的实现案例。
首先按照上图定义了两个接口:
由于我们这是一个下单的事件,所以定义了
其中的 接着便是编写观察者业务逻辑了,这里我实现了两个:
使用起来也非常简单:
Output:
这样一旦我们需要修改各个事件的实现时就不会互相影响,即便是要加入其他实现也是非常容易的:
不会再修改核心流程。 配合容器其实我们也可以省略掉注册事件的步骤,那就是使用容器;大致流程如下:
修改后的代码中,每当我们新增一个观察者(事件订阅)时,只需要使用容器所提供 同时为了让容器能够支持同一个对象存在多个实例也需要新增部分代码: Observer.go:
在
创建具体观察者对象时返回
这样在注册观察者时,便能从
这样在使用时直接从容器中获取主题对象,然后通知即可:
更多关于 dig 的用法可以参考官方文档: https://pkg.go.dev/go.uber.org/dig#hdr-Value_Groups 总结有经验的开发者会发现和发布订阅模式非常类似,当然他们的思路是类似的;我们不用纠结与两者的差异(面试时除外);学会其中的思路更加重要。 更多推荐内容 ↓ 《Go 中的 channel 与 Java BlockingQueue 的本质区别》 《为自己搭建一个分布式 IM(即时通讯) 系统》 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:43:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |