设计模式<创建型> | 原型模式 原型模式(Prototype Pattern)如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,就可以可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。 结构图: 角色: 原型对象(prototype):需要进行复制的对象。 适用场景: 需 2023-02-27 设计模式 #设计模式 #创建型
设计模式<创建型> | 生成器模式 生成器模式(Builder pattern)将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。解决构造函数过多或者过于复杂。可以把构造函数里面的约束条件的校验使用建造者模式放到 builder 类中去。 结构图: 角色: 产品(Product):需要创建的产品,是最终生成的对象。 抽象生成器(IBuilder):声明产品构造步骤接口。 具体生成器(Concrete Build 2023-02-23 设计模式 #设计模式 #创建型
设计模式<创建型> | 工厂模式 简单工厂(Factory Pattern)简单工厂(静态工厂)可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 结构图: 角色: 简单工厂(FactoryProduct):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品(IProduct): 2023-02-21 设计模式 #设计模式 #创建型
设计模式 <创建型> | 单例模式 单例模式(Singleton)单例设计模式(Singleton Design Pattern),一个类在只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模。 结构图: 适用场景: 无状态的工具类可以使用单例模式。 角色: 单例类(Singleton):负责生成单例并返回 优点: 可以保证对象的唯一性,用于解决资源竞争等场景。 缺点: oop支持不友好 2023-02-21 设计模式 #设计模式 #创建型
数据结构-图 怎么理解”图”图是是一种复杂的非线性结构。图中的每一个元素叫做顶点(vertex), 图中就有六个顶点。图中每一个一个顶点可以与任意其他顶点建立连接关系。这种建立的关系叫做边(edge)。 以微信好友举例,把每个用户看作一个顶点。如果两个用户之间互加好友,那就在两者之间建立一条边。所以,整个微信的好友关系就可以用一张图来表示。其中,每个用户有多少个好友,对应到图中,就叫做顶点的度(degre 2022-10-13 数据结构与算法 #数据结构
算法 - 二分查找 什么是二分查找二分查找算法,也称折半搜索算法对数搜索算法,是针对的是一个有序的数据集合中搜索的算法。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 譬如我随机有序的写下0-9 十个数字,没猜一次我都会告诉你数值是大了还是小了,这样你就可以有效的缩小差早范围。 实现123456789101112131415func Search(nums 2022-09-15 数据结构与算法 #数据结构 #算法
数据结构 - 时间复杂分析 前言时间复杂度简单来说就是一种可以粗略估计一个函数或者算法的执行效率的方法。并且它是宿主平台无关的,能够对的程序或算法有一个大致的认识,让我们知道,比如在最坏的情况下程序的执行效率如何。 既然是计算执行效率那么为什么不进行性能基准测试来衡量呢,性能测试通过统计、监控,就能得到算法执行的时间和占用的内存大小。但是这种测试一般都是代码开发结束后。且有一定的局限性。 非常依赖环境,在不同的环境中得到的 2022-09-01 数据结构与算法 #数据结构 #算法
gRPC 拦截器 前言gRPC 的拦截器类似 .NET Core 中的中间件和过滤器,是AOP的的一种实现方式,非常适合做一些与业务无关的处理,譬如错误处理、日志记录、身份验证等。 拦截器类型要自定义拦截器就必须继承 Interceptor 抽象类。它是所有拦截器的基类,它定义了几个可以重写的虚方法。 拦截器可以分为 一元拦截器 和 流式拦截器,或者 客户端拦截器 和 服务端拦截器。 2022-08-25 .NetCore #.NetCore
HttpClient 实践 开始在 .NetCore2.1 之前只能使用 HttpClient 发起 HTTP 的各种操作,但是 HttpClient 使用中会有一些问题。 如果过于频繁的创建 HttpClient 实例 ,虽然 HttpClient 实现了 IDisposable ,但是在 HttpClient 释放后,由于 TCP 生命周期的问题的。会导致套接字资源耗尽。抛出 SocketException 异常。 如 2022-08-17 .NetCore #.NetCore
数据库隔离级别 四种隔离级别当数据库上有多个事务同时执行的时候,就可能出现: 脏读(dirty read) 当用户进行充值操作的时候,程序一般都需要操作几个不同的表,当时我们在修改用户余额后,用户查询了自己余额,发现余额已经变更,但是程序后面的操作出现了异常,开启了回滚,这时候用户又发现自己的余额没有变更。这时候用户就出现了脏读,当时修改完用户余额时候事务并没有提交,而继续在执行下面的操作,而用户就读取了未提交 2022-08-08 mysql #mysql