设计模式<结构型> | 桥接模式 桥接模式(Bridge Pattern)桥接模式也叫桥梁模式,将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。 结构图: 角色: 抽象类(Abstract):定义抽象类,提供高层控制逻辑,并包含一个对实现对象的引用。 扩展抽象类(Refined Abstraction):扩展Abstract中的接口定义。通常情况下它不再是抽象类而是具体类,实现了在 A 2023-02-28 设计模式 #设计模式 #结构型
设计模式<结构型> | 代理模式 代理模式(Proxy Pattern)在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。一般情况下,让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是自己开发维护的。在这种情况下,可以通过让代理类继承原始类的方法来实现代理模式。 结构图: 角色: 原始主题(RealSubject):也就是需要被代理的类。 抽象主题(ISubject):真 2023-02-28 设计模式 #设计模式 #结构型
设计模式<创建型> | 原型模式 原型模式(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