自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 资源 (6)
  • 收藏
  • 关注

转载 职责链模式——预防产品加需求

职责链模式所拥有的特点让流程中的每个处理节点都只需关注满足自己处理条件的请求进行处理即可,对于不感兴趣的请求,会直接转发给下一个节点对象进行处理。另外职责链也可以设置中止条件,针对我们文中的例子就是在Execute方法里加判断,一旦满足中止后就不再继续往链路的下级节点传递请求。Gin 的中间件的abort方法就是按照这个原理实现的,同时这也是职责链跟装饰器模式的一个区别,装饰器模式无法在增强实体的过程中停止,只能执行完整个装饰链路。

2023-05-12 16:19:20 218 1

转载 策略模式——if else 分支太多?快来治理一下

策略模式是一种行为设计模式,通过策略模式,可以在运行时修改一个对象的行为。很多资料里对它的定义是:定义一类算法族,将每个算法分别封装起来,让他们可以互相替换,此模式让算法的变化独立于使用算法的客户端。看完策略模式这个定义,你是不是也有一种看了等于没看的感觉,我一开始看的时候也是这样,下面我再用一些大白话给大家解释一下。

2023-05-12 11:29:33 278

转载 模板模式——提炼流程,减少重复开发

模版模式,有的也翻译成模版方法模式,主要是因为这个模式里有个模版方法,不过后面实际应用的时候我会提到,这个模版方法在设计一些有客户端和服务多次交互的场景里,其实也可以是虚拟的,我们自己形成意识设计API即可,不一定非要在设计模式的类实现里真实存在。当要做一件事儿的时候,这件事儿的流程和步骤是固定好的,但是每一个步骤的具体实现方式是不一定的。这个时候就可以使用模板模式。

2023-05-11 11:37:25 213

转载 建造者模式——Go开源库、大项目的公共包

建造者模式,也有翻译成生成器模式的,大家看到后知道他们是一个东西,都是翻译过来的就行。它是一种对象构建模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。那么什么情况下适合使用建造模式呢?当要构建的对象很大并且需要多个步骤时,使用构建器模式,有助于减小构造函数的大小。我们先来看下其他语言里的 Builder,再看看 Go 怎么使用,进行个对比。

2023-05-08 22:58:35 122

转载 原型模式

通过复制、拷贝或者叫克隆已有对象的方式来创建新对象的设计模式叫做原型模式,被拷贝的对象也被称作原型对象。原型对象按照惯例,会暴露出一个 Clone 方法,给外部调用者一个机会来从自己这里“零成本”的克隆出一个新对象。这里的“零成本”说的是,调用者啥都不用干,干等着,原型对象在 Clone 方法里自己克隆出自己,给到调用者,所以按照这个约定所有原型对象都要实现一个 Clone 方法。这里我们用UML类图描述一下原型模式中各角色拥有的行为以及它们之间的关系至于原型对象克隆自己的时候用的是深拷贝还是浅拷贝。

2023-05-07 23:15:28 59

转载 工厂模式——三个Level

设计模式中的工厂模式是我们编写代码时常用的一种建造型模式,用于创建指定类的实例。在不使用设计模式的时候,我们是怎么创建类的实例的呢?别多想,这个问题没坑,就是我们写代码时直接用 new 关键字,直接创建实例。比如 Java 语言里是通过 new 关键字直接调用类的构造方法,完成实例的创建。而像 Go 语言这类,虽说是非面向对象语言,但也提供了创建类型实例指针的 new 方法。那既然能直接 new ,有人肯定会问“那为什么还要用设计模式啊?而且听说工厂模式里边还能分出好几种工厂”。

2023-04-24 23:45:38 75

转载 单例模式

单例模式是用来控制类型实例的数量的,当需要确保一个类型只有一个实例时,就需要使用单例模式由于要控制数量,那么可想而之只能把实例的访问进行收口,不能谁来了都能 new 一个出来,所以单例模式还会提供一个访问该实例的全局端口,一般都会命名个之类的函数用作实例访问的端口。又因为在什么时间创建出实例,单例模式又可以分裂出 饿汉模式和 懒汉模式,前者适用于在程序早期初始化时创建已经确定需要加载的类型实例,比如项目的数据库实例。后者其实就是延迟加载的模式,适合程序执行过程中条件成立才创建加载的类型实例。

2023-04-24 22:49:36 270

转载 观察者模式——拒绝Go代码臃肿

观察者模式——拒绝Go代码臃肿

2023-03-08 23:12:19 91

原创 Golang问题归纳

Golang 问题归纳

2023-01-06 22:15:12 619

原创 3个函数分别打印cat、dog、fish,要求每个函数都要起一个goroutine,按照cat、dog、fish顺序打印在屏幕上100次。

3个函数分别打印cat、dog、fish,要求每个函数都要起一个goroutine,按照cat、dog、fish顺序打印在屏幕上100次。

2023-01-04 22:33:41 651

原创 使用channel控制并发个数

使用channel控制并发个数

2023-01-04 22:30:02 163

原创 设计模式——职责链模式

学校 OA 系统的采购审批项目:需求是采购员采购教学器材如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000) 如果金额 小于等于 10000, 由院长审批 (5000<x<=10000) 如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000) 如果金额 超过 30000 以上,有校长审批 ( 30000<x)传统方案解决 OA 系统审批传统方式是:接收到一个采购请求后,根据采购金额来调用对应的 App

2022-02-10 10:42:40 109

原创 设计模式——策略模式

编写鸭子项目,具体要求如下有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息传统方案解决鸭子问题的分析和代码实现传统的设计方案(类图)演示package com.atguigu.strategy;public abstract class Duck { public Duck() { } public abstract void display();//显示鸭子信息 public void quack() {

2022-02-10 10:12:27 84

原创 设计模式——状态模式

APP 抽奖活动问题假如每参加一次这个活动要扣除用户 50 积分,中奖概率是 10% 奖品数量固定,抽完就不能抽奖 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完 活动的四个状态转换关系图(下图)状态模式基本介绍状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态 和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类原理类图Context 类为

2022-02-09 19:25:29 122

原创 设计模式——解释器模式

四则运算问题通过解释器模式来实现四则运算,如计算 a+b-c 的值,具体要求先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复 在分别输入 a ,b, c, d, e 的值 最后求出结果:如图传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱, 不够清晰解释器模式基础介绍在编译原理中,一个算术表

2022-02-09 17:47:51 81

原创 设计模式——备忘录模式

游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御 力下降,从备忘录对象恢复到大战前的状态传统方案解决游戏角色恢复传统的方式的问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大 传统的方式是简单地做备份,new 出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了 对象内部的细节备忘录模式基本介绍备忘录模式(Memento Pat.

2022-02-09 16:24:23 1854

原创 设计模式——中介者模式

智能家庭项目智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始 做咖啡->窗帘自动落下->电视机开始播放传统方案解决智能家庭管理问题当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂各个电器对象彼此联系,你中有我,我中有你,不利于松耦合各个电器对象之间所传递的消息(参数),容易混乱当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性、扩展性都不

2022-02-09 15:35:36 67

原创 设计模式——观察者模式

天气预报项目需求气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方) 需要设计开放型 API,便于其他第三方也能接入气象站获取数据 提供温度、气压和湿度的接口 测量数据更新时,要能实时的通知给第三方普通方案package com.atguigu.observer;/** * 类是核心 * 1. 包含最新的天气情况信息 * 2. 含有 CurrentConditions 对象 * 3. 当数据有更新时,就主动的调用 Current

2022-02-08 18:25:56 91

原创 设计模式——迭代器模式

看一个具体的需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图:传统的设计方案(类图)传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作迭代器模式基本介绍迭代器模式(Iterator Pattern)是常用的设计模式

2022-02-08 11:42:58 86

原创 设计模式——访问者模式

测评系统的需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不 同的种类,比如 成功、失败 等)传统方式的问题分析如果系统比较小,还是 ok 的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了 ocp 原则, 不 利于维护 扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做 引出我们会使用新的设计模式 ——访问者模式访问者模式基本介绍访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各

2022-02-08 10:53:42 131

原创 设计模式——命令模式

智能生活项目需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装 app 就可以控制对这些家电 工作。 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 App,分别控制,我们希望只要一个 app 就可以控制全部智能家电。 要实现一个 app 控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给 app 调用,这时 就 可以考虑使用命令模式。 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来 在我们的例子中,动作的请求者是手机 app

2022-02-07 18:05:52 78

原创 设计模式——模板方法模式

豆浆制作问题制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用 模板方法模式完成(说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统的方案来引出模板方法模式)模板方法模式基本介绍模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一

2022-02-07 17:00:13 57

原创 设计模式——代理模式

代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不同的形式,主要有三种 静态代理、动态代理(JDK 代理、接口代理)和 Cglib 代理(可以在内存 动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)。 代理模式示意图静态代理静态代码模式的基本介绍静态代理.

2022-02-07 16:19:10 96

原创 设计模式——享元模式

展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网 站,但是要求都有些不同:有客户要求以新闻的形式发布 有客户人要求以博客的形式发布 有客户希望以微信公众号的形式发布传统方案解决网站展现项目直接复制粘贴一份,然后根据客户不同要求,进行定制修改 给每个网站租用一个空间 方案设计示意图传统方案解决网站展现项目问题分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站

2022-01-22 00:16:53 118

原创 设计模式——外观模式

影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:直接用遥控器:统筹各设备开关开爆米花机放下屏幕开投影仪开音响开 DVD,选 dvd去拿爆米花调暗灯光播放观影结束后,关闭各种设备传统方式解决影院管理...

2022-01-20 21:21:53 68

原创 设计模式——组合模式

看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图传统方案解决学校院系展示(类图)传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等 解决方案:把学校、院、

2022-01-19 23:36:17 79

原创 设计模式——装饰者设计模式

星巴克咖啡订单项目(咖啡馆)咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合方案1——解决星巴克咖啡订单项问题分析Drink 是一个抽象类,表示饮料 description 就是对咖啡的描述, 比

2022-01-18 22:01:50 159

原创 设计模式——桥接模式

手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图传统方案解决手机操作问题传统方法对应的类图传统方案解决手机操作问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加 一个手机品牌,也要在各个手机样式类下增加 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本 解决方案→使用桥接模式桥接模式(Bridge)基本介绍桥接模式(Br

2022-01-17 15:16:24 260

原创 设计模式——适配器设计模式

基本介绍泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本 因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 从用户的角度看不到被适

2022-01-16 22:38:24 236

原创 设计模式——建造者模式

package com.atguigu.builder;public class Client { public static void main(String[] args) { CommonHouse commonHouse = new CommonHouse(); commonHouse.build(); }}盖房项目需求需要建房子:这一过程为打桩、砌墙、封顶 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的传统方式解决盖房需..

2022-01-15 18:09:13 109

原创 设计模式——原型模式

克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊。传统方式解决克隆羊问题思路分析(图解)package com.atguigu.prototype;public class Sheep { private String name; private int age; private String color; public Sheep(String name, in

2022-01-13 23:17:16 66

原创 设计模式——工厂模式

简单工厂模式看一个具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等) 披萨的制作有 prepare、bake、cut、box 完成披萨店订购功能使用传统的方式来完成编写 OrderPizza.java 去订购需要的各种 Pizzapackage com.atguigu.factory.simplefactory.pizzastore.pizza;//将Pizza 类做成抽象public .

2022-01-10 19:48:34 245

原创 设计模式——单例模式

单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是 轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。饿汉式(静态常量)步骤构造器私有化 (防止 new ) 类的内部

2022-01-09 22:58:03 116

原创 设计模式——UML

UML 基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用 于帮助软件开发人员进行思考和记录思路的结果 UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他 们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图:UML 图UML 图分类:用例图(use case) 静态结构图:类图、对象图、包图、组件图、部署图 动态行为图:交互图(时序

2022-01-07 22:38:20 367

原创 设计模式——七大原则

编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的 挑战,设计模式是为了让程序(软件),具有更好的代码重用性(即:相同功能的代码,不用多次编写)

2022-01-04 21:54:03 207

原创 那些借影子说出的话

你偷走了我的影子,不论你在哪里,我都会一直想着你。

2021-08-15 11:50:20 181

转载 TiDB 技术内幕(计算)

关系模型到 Key-Value 模型的映射 在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句。 假设我们有这样一个表的定义:CREATE TABLE User { ID int, Name varchar(20), Role varchar(20), Age int, PRIMARY KEY (ID), Key idxAge (age)};...

2021-06-01 21:07:02 160

转载 TiDB 技术内幕(存储)

保存数据 Key-Value

2021-05-31 22:15:15 316

转载 TiDB架构特性

TiDB 整体架构TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。

2021-05-29 21:47:58 309

转载 TiDB 引入

从 MySQL 到 TiDB如今的数据库种类繁多,RDBMS(关系型数据库)、NoSQL(Not Only SQL)、NewSQL,在数据库领域均有一席之地,可谓百家争鸣之势。那么我们为什么要学习使用TiDB呢?接下来就从我们最熟悉的MySQL的使用说起!...

2021-05-29 21:09:32 159

postman.zip

postman是一款强大网页调试工具的客户端,postman为用户提供强大的 Web API & HTTP 请求调试功能。postman能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..),附带任何数量的参数+ headers,是一款非常实用的调试工具。需要的朋友快来下载吧。

2020-08-11

springboot-security.zip

Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。

2020-07-04

ElasticSearch.zip

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便

2020-05-24

springboot-swagger.zip

随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架。

2020-05-21

springboot-web.zip

页面国际化、SpringBoot拦截器。有的时候,我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要学习国际化了!拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。

2020-05-20

谷歌404恐龙.zip

“没有互联网,你就像生活在恐龙时代”,Google Chrome经典的404的小恐龙不知道有多少人玩过,按一下空格可以玩上一阵小游戏……正如Google Chrome的设计师所说,虽然这是绝不想让用户看到的画面,但必须考虑当他们看到的时候,怎么做才能缓解用户的焦虑感。

2020-05-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除