设计模式-行为型-责任链模式(Chain of Responsibility)
参考文献
https://www.oodesign.com/chain-of-responsibility-pattern
https://java-design-patterns.com/patterns/chain-of-responsibility/
https://refactoringguru.cn/design-patterns/chain-of-responsibility
责任链模式
允许你将请求沿着处理者链进行发送. 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者.
组件
Request: 责任链中的请求对象
1public class Request{}
Handler: 定义处理请求的接口
1234public interface Handler{ boolean shouldSkip(Request request); boolean handle(Request request);}
RequestHandler: 实际处理请求的类
如果它可以处理请求,则进行处理,否则将 ...
SpringBoot-注解@Conditional
参考文献
@Conditional注解
12345678910111213// org.springframework.context.annotation.Conditional@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Conditional { /** * All {@link Condition} classes that must {@linkplain Condition#matches match} * in order for the component to be registered. */ Class<? extends Condition>[] value();}
@Conditional注解是从Spring 4.0才有的,可以在任何类型或方法上面标注.通过@Conditional注解可以 ...
SpringBoot-Yaml配置
参考文献
YAML格式
以空格的缩进程度来控制层级关系。空格的个数并不重要,只要左边空格对齐
则视为同一个层级。注意不能用 tab 代替空格。且大小写敏感。支持字面值,
对象,数组三种数据结构,也支持复合结构。
字面值:字符串,布尔类型,数值,日期。字符串默认不加引号,单引号会转
义特殊字符。日期格式支持 yyyy/MM/dd HH:mm:ss
对象:由键值对组成,形如 key:(空格)value 的数据组成。冒号后面的空格是
必须要有的,每组键值对占用一行,且缩进的程度要一致,也可以使用行内写
法: {k1: v1, ....kn: vn}
数组:由形如 -(空格)value 的数据组成。短横线后面的空格是必须要有的,每
组数据占用一行,且缩进的程度要一致,也可以使用行内写法: [1,2,...n]
复合结构:上面三种数据结构任意组合
示例
12345678910userinfo: age: 25 name: myjszl active: true created-date: 2018/03/31 16:54:30 map: {k1: v1 ...
SpringCloudAlibaba-基础
参考文献
SpringCloud Alibaba 从入门到精通
SpringCloud Alibaba
SpringCloud版本
SpringCloud Alibaba与SpringCloud
Spring Cloud 第一代
状态
SpringCloud Alibaba
状态
Eureka
2.0孵化失败
Nacos Discovery
性能强劲,感知更快
Ribbon
进入维护状态,新标准已经形成spring-cloud-loadbalancer
Hystrix/Hystrix Dashboard/Turbine
进入维护状态
Sentinel
可视化配置,上手更简单
Zuul
进入维护状态
Spring Cloud Gateway
性能是Zuul的1.6倍
Spring Cloud Config
搭建复杂,约定多,设计繁重,没有界面
Nacos Config
搭建简单,有可视化界面
SpringCloud Alibaba重要组件
服务发现以及配置管理Nacos
负载均衡Ribbon
声明式HTTP客户端Feign
服务容错Sentin ...
设计模式-行为型-模版方法模式(Template Method)
参考文献
https://refactoringguru.cn/design-patterns/template-method
https://www.oodesign.com/template-method-pattern
模版方法模式
模板方法使用子类重写的抽象操作在基类中定义算法以提供具体行为.
定义操作中算法的骨架,将某些步骤推迟到子类中.
模板方法允许子类重新定义算法的某些步骤,而不让它们改变算法的结构.
模板方法模式建议将算法分解为一系列步骤, 然后将这些步骤改写为方法, 最后在 “模板方法” 中依次调用这些方法. 步骤可以是 抽象的, 也可以有一些默认的实现. 为了能够使用算法, 客户端需要自行提供子类并实现所有的抽象步骤. 如有必要还需重写一些步骤 (但这一步中不包括模板方法自身).
组件
AbstractClass(抽象类): 定义具体子类定义的抽象基元操作以实现算法的步骤.
实现定义算法骨架的模板方法.模板方法调用原始操作以及 AbstractClass 或其他对象中定义的操作
ConcreteClass(具体类): 实现原始操作以执行 ...
设计模式-行为型-空对象模式(Null Object)
参考文献
https://www.oodesign.com/null-object-pattern
https://java-design-patterns.com/patterns/null-object/
空对象模式
它用于处理对象引用为空时的情况.
该模式的目标是消除对空引用的显式检查,从而提高代码可读性和可维护性.
组件
AbstractClass: 定义具体实现必须定义的抽象基元操作.
RealClass: AbstractClass的实际实现,执行一些实际操作
NullClass: 不执行任何抽象类操作的实现,以便向客户端提供非空对象
Client: 客户端获取抽象类的实现并使用它.它并不真正关心实现是空对象还是真实对象,因为它们都以相同的方式使用
实现方式
定义一个共同的接口或抽象类,其中包含实际对象和空对象的共同方法.
创建一个实际对象类,实现共同接口,并提供具体的实现逻辑.
创建一个空对象类,也实现共同接口,但在方法中提供空实现.
在需要使用对象的地方,使用空对象作为默认值,而不是使用 null.
使用场景
避免在代码中频繁进行 null 引用的检查 ...
设计模式-行为型-访问者模式(Visitor)
参考文献
https://java-design-patterns.com/patterns/visitor/
https://www.oodesign.com/visitor-pattern
https://refactoringguru.cn/design-patterns/visitor
访问者模式
表示要对对象结构的元素执行的操作
Visitor允许您定义新操作,而无需更改其操作的元素的类
组件
Visitor: 这是一个接口或抽象类,用于声明所有类型的可访问类的访问操作.通常操作的名称是相同的,并且操作通过方法签名来区分:输入对象类型决定调用哪个方法.
ConcreteVisitor: 对于每种类型的访问者,必须实现在抽象访问者中声明的所有访问方法.每个访客将负责不同的操作.当定义一个新的访问者时,它必须被传递到对象结构.
Visitable : 是声明接受操作的抽象.这是访问者对象能够“访问”对象的入口点.集合中的每个对象都应该实现此抽象,以便能够被访问.
ConcreteVisitable: 这些类实现 Visitable 接口或类并定义接受操作.使用acce ...
设计模式-创建型-单例模式(Singleton)
参考文献
https://java-design-patterns.com/patterns/singleton/
https://www.oodesign.com/singleton-pattern
https://refactoringguru.cn/design-patterns/singleton
单例模式
保证一个类只有一个实例,并提供一个访问该实例的全局节点.
组件
在单例模式中,只有Singleton这一个角色.
Singleton角色中有一个返回唯一实例的static方法.该方法总是返回同一个实例.
实现方式
在类中添加一个私有静态成员变量用于保存单例实例.
声明一个公有静态构建方法用于获取单例实例.
在静态方法中实现"延迟初始化". 该方法会在首次被调用时创建一个新对象, 并将其存储在静态成员变量中. 此后该方法每次被调用时都返回该实例.
将类的构造函数设为私有. 类的静态方法仍能调用构造函数, 但是其他对象不能调用.
检查客户端代码, 将对单例的构造函数的调用替换为对其静态构建方法的调用.
具体实现
懒汉式
12345678910 ...
设计模式-创建型-原型模式(Prototype)
参考文献
https://www.oodesign.com/prototype-pattern
https://refactoringguru.cn/design-patterns/prototype
https://java-design-patterns.com/patterns/prototype/
原型模式
使用原型实例指定要创建的对象类型,并通过复制此原型来创建新对象.
通过复制生成实例
组件
Prototype : 负责定义用于复制现有实例来生成新实例的方法.
ConcretePrototype : 负责实现复制现有实例并生产新实例的方法.
Client : 负责使用复制实例的方法生产新的实例
123456789101112131415161718public interface Prototype { public abstract Object clone ();}public class ConcretePrototype implements Prototype { public Object clone() { ...
设计模式-创建型-对象池模式(ObjectPool)
参考文献
https://www.oodesign.com/object-pool-pattern
https://java-design-patterns.com/patterns/object-pool/
对象池模式
重用和共享创建成本高昂的对象。
当客户端请求可重用对象时,池将执行以下操作:
搜索可用的可重用对象,如果找到,它将返回给客户端。
如果没有找到可重用对象,那么它会尝试创建一个新对象。如果此操作成功,新的可重用对象将返回给客户端。
如果池无法创建新的可重用对象,则池将等待,直到释放可重用对象
组件
Reusable(可重复使用的资源) :包装有限的资源,将由多个客户端在有限的时间内共享。
Client : 使用可重用类型的实例
ReusablePool: 管理供客户端使用的可重用对象,创建和管理对象池
实现注意事项
Limited number of resources in the pool
内资源数量有限
Handling situations when creating a new resource fails
创建新 ...