满纸荒唐言,一把心酸泪,都云作者痴,谁解其中味。 技术博客 心情随笔 登录
设计模式:原型
2025/3/17 763
原型模式非常简单,用一句话既可概括:以一个已存在的对象作为原型,快速克隆产生出新的对象。一些对象的构造逻辑包含复杂的过程,比如I/O操作、网络通信、第三方交互等,通过原型模式可以跳过这些过程,高效的克隆出目标对象。
观察者模式定义了对象之间一对多的依赖关系,当一个对象发生变化时,多个依赖它的对象都会收到通知。观察者模式也是一种通信范式,不光存在于软件开发中,在日常生活中也非常常见,比如拍卖会上的竞拍者观察拍卖师的报价后制定自己的出价策略,粉丝在微博上关注自己喜欢的明星后收到明星的动态推送等。因为观察者模式在开发中使用的非常频繁,大部分开发语言和框架均原生支持观察者模式,比如C#中的事件、QT中的信号槽等。
之前的两篇文章基于C++演示了gRPC的服务端、客户端以及Protobuf应用与代码示例,本文将基于C#演示gRPC的服务端与客户端。
RPC全称Remote Procedure Call(远程过程调用),它能让调用远端的函数就像调用本地函数一样容易。gRPC就是Google开发的RPC,软件巨头们几乎都开发过RPC框架,像微软的.Net Remoting、WCF,Fackbook的Thrift,阿里的Dubbo以及互联网兴起时的WebService等。但从性能、适用范围、流行程度多个维度来看,截止发文时止,gRPC目前全面领先于其它框架。
在上一篇文章《gRPC基础:C++服务端与客户端代码示例》中以从0到1的入门视角,详细介绍了gRPC的编译安装、编写proto文件、以及根据proto文件生成服务端与客户端的代码示例。但还遗留了一个非常重要的场景未讨论,它就是观察者模式,因此本文专门分析和演示如何通过gRPC实现很多高级编程语言都具备的观察者模式。
工厂模式的核心目的是将对象的创建与使用分离,我们习惯于在构造函数中进行一系列对象的初始化甚至逻辑处理,如果仔细推敲,会发现其实并不符合常理。如果把汽车的发动机当作一个对象,我们向发动机传入设计图纸,然后发动机自己把自己生产了出来。是的,发动机自己生产了自己,是不是感觉有些怪异?其实现实生活中的场景更符合逻辑,把图纸送到发动机生产工厂,由工厂完成发动机的生产制造。在软件开发中,大多数简单对象,并不需要使用工厂,但当一个对象的构造过程相对复杂、易变时,就需要考虑使用工厂将对象的创建过程解耦了。
依赖注入(DI)与控制反转(IoC)可能是一些开发小伙伴耳熟但又不能详的两个词,经常看到它们的名字,但又不理解。这两个词来源于英文直译,看似高深莫测,其实非常简单,并且在一些开发场景中扮演着不可或缺的角色,比如单元测试离不开依赖注入,IoC容器是插件框架的最佳拍档等,本文尝试以最简单的方式阐述这两种思想在开发中的应用。
这篇文章以标题形式在草稿箱里躺了很多年,当年想写一篇关于字符集编码的文章时,是因为包括自己在内的很多开发人员都面临字符集编码的困惑,当时在网页中使用GB2312、MySQL数据库中使用GBK、Visual Studio 2005生成的源代码文件是UTF-8......今天完成这篇文章早已时过境迁,最近也越发觉得执行力远比好的点子和计划重要,后续除了及时分享总结自己的开发经验,还会将之前天马行空的项目尽快落地实施,共勉。