
设计模式
文章平均质量分 62
cj_eryue
工作之余的学习
展开
-
23种设计模式(10)——门面模式
其实,在日常编码工作中,我们都在有意无意地大量使用门面模式。但凡只要高层模块需要调度多个子系统(2个以上类对象),我们都会自觉地创建一个新类封装这些子系统,提供精简的接口,让高层模块可以更加容易地间接调用这些子系统的功能。原创 2023-10-27 11:07:34 · 398 阅读 · 0 评论 -
23种设计模式(9)——适配器模式
适配器模式介绍以及在框架中的应用原创 2023-04-20 16:21:19 · 597 阅读 · 0 评论 -
23种设计模式(8)—— 责任链模式
责任链模式一、概念是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止。二、使用场景有多个对象可以处理同一个请求,具体哪个对象处理该请求待运行时刻再确定。 在不明确指定接受者的情况下,向多个对象中的一个提交一个请求。 可动态指定一组对象处理请求,客户端可以动态创建职责链来处理请求。三、Demo销售团队处理客户折扣需求Sales:<=5%Manager:<=30%原创 2022-01-25 16:30:32 · 115 阅读 · 0 评论 -
23种设计模式(7)—— 建造者模式
package com.cjian.GOF.builder;/** * @description: * @author: CJ * @time: 2021/11/30 9:13 */public class Computer { private String cpu;//必须 private String ram;//必须 private int usbCount;//可选 private String keyboard;//可选 privat.原创 2021-11-30 23:32:27 · 250 阅读 · 0 评论 -
23种设计模式(6)—— 模板方法
什么是模板模式模板模式是在一个抽象类中定义了执行它的方法的方式(模板方法),由抽象类的子类根据具体的业务需求去重写父类的中方法,但执行时将调用抽象类中定义的方式进行。在模板模式中,一个抽象的公开定义了执行它的方法的方式(模板)。它的子类可以重写方法实现,但调用将以抽象类中定义的方法进行。这种类型的设计模式属于行为型模式使用场景多个子类有共同的方法,且逻辑基本相同 可以把核心的算法和重要的功能设计为模板方法,子类去实现相关细节功能 系统在进行重构或者是功能优化的时候可以将子类重复的代码原创 2021-10-26 15:10:13 · 242 阅读 · 0 评论 -
23种设计模式(5)——装饰器模式
装饰模式是对客户端以透明的方式扩展对象的功能,是继承关系的一个替代方案。也就是说,客户端并不会觉得对象在装饰前和装饰后有什么不同,装饰模式可以在不用创造更多子类的情况下,将对象的功能加以扩展,装饰模式的关键在于这种扩展是完全透明的。先看demo:先定义一个接口,以及两个实现类package com.cjian.GOF.decorator;public interface House { //装饰风格 void style();}package com.cjian原创 2021-08-31 11:43:51 · 108 阅读 · 0 评论 -
23种设计模式(4)—— 策略模式
策略模式(Strategy Pattern):一个类的行为或其算法可以在运行时更改。比如实际项目中,有一些数据交互的工作,我们需要对数据的值进行合法性校验,如手机号,性别等,这时,我们一般使用if else去校验,耦合度太高,后期也不便于维护,这时我们就可以使用策略模式,直接上伪代码。先定义一个枚举类:package com.cjian.GOF.strategy.strategy2;/** * 校验类型的枚举类 */public enum ParamTypeEnum { E原创 2021-08-30 10:56:37 · 175 阅读 · 2 评论 -
23种设计模式(3)——观察者模式
观察者模式:观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。package com.cjian.GOF;import java.util.ArrayList;import java.util.List;/** * @description: 观察者模式 * @author: CJ * @t..原创 2020-12-16 16:01:03 · 124 阅读 · 0 评论 -
动态代理实践以及底层原理分析
自Java 1.3以后,Java提供了动态代理技术,允许开发者在运行期创建接口的代理实例,后来这项技术被用到了Spring的很多地方。JDK动态代理主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横切逻辑和业务逻辑贬值在一起。JDK动态代理的话,他有一个限制,就是它只能为接口创建代理实例,而对于没有通过接口定义业务方法的类,原创 2020-10-16 17:12:07 · 276 阅读 · 0 评论 -
23种设计模式(1)——单例模式
目录1.懒汉模式2.饿汉模式3.静态内部类4.反射攻击实例5.枚举类型单例模式:保证一个类只有一个是实例,并且提供一个全局访问点。使用场景:重量级对象,不需要多个实例,如线程池、数据库连接池。1.懒汉模式延迟加载,只有在真正使用的时候,才开始实例化。1)线程安全问题;2)DCL(double check locking),加锁优化3)编译器(JIT),CPU有可能会发生指令重排,导致使用到尚未初始化完成的实例,可以通过添加volatile关键字..原创 2020-08-21 15:06:42 · 157 阅读 · 0 评论