传送门
SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口
前言
推荐阅读
精品文章(小黄书):https://mp.weixin.qq.com/s/lzsngaSvIjxJaD72cRkYgQ
小哈学java:https://mp.weixin.qq.com/s/m3u6NGQq_bwdtOZfZvnOiQ
这两篇文章写的非常之好。下面文章不定期更新中。。。
一、创建型(总结:为了不用new)(5种)
1、工厂模式
实现了创建者和调用者的分离。
实例化对象不使用new,使用工厂方法代替;将选择实现类,创建对象统一管理和控制;从而将调用者跟我们的实现类解耦。
简单工厂模式(静态工厂)(不在23种里面):用来生成同一等级结构中的任意产品(对于增加新的产品需要覆盖已有代码)。其实不符合设计原则,但是使用很多。
工厂方法模式:用来生成同一等级结构中的固定产品(支持增加任意产品)。不使用已有类的情况下,通过增加新的工厂类来实现扩展。
(总结:不用new用工厂)
抽象工厂模式:围绕一个超级工厂创建其他工厂, 该超级工厂又称为其他工厂的工厂。不可以增加产品(消费者不接触产品,只接触工厂),可以增加产品族(增加一个产品族几乎所有子类都要改,适合不经常增加的,比如小米华为手机路由器,增加个笔记本)
(总结:工厂的工厂)
IPhoneProduct产品
IRouterProduct产品
IProdcutFactory超级工厂
超级工厂创建XiaomiFactory工厂
使用
类图
小米华为产品族
应用场景:
JDK中的Calendar的getInstance方法;JDBC的getConnection的获取;Spring中IOC容器创建管理Bean对象;反射中Calss对象的newInstance方法;
2、单例
一个类在整个运行过程中有且仅有一个。例如:工厂本身,配置文件,日历,IOC容器
(总结:为了创建only一个对象)
// 饿汉式:(先new)
private static final Hungry hungry =
new Hungry();
private Hungry(){};
public static Hungry getInstance(){
return hungry;
} // 无线程安全问题
// 懒汉式:(用到的时候才new)(延时加载)
private static final Hungry hungry =
null;
private Hungry(){};
public static Hungry getInstance(){
if (hungry == null) {
hungry = new Hungry();
}
return hungry;
}
3、创建者模式
将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示;在用户不知道对象的创建过程和细节的情况下就可以直接创建复杂的对象。
(总结:为了创建复杂对象)
定义:
产品房子
抽象的建造者和具体的建造者
指挥
使用
建造者和抽象工厂模式的对比
4、原型模式
po复制到Dto或者Vo中
(总结:不用new用克隆,尤其复杂对象)
浅克隆深克隆
使用
二、结构型(总结:为了松耦合)(7种)
1、适配器模式
适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原来由于接口不兼容无法一起工作的类能一起工作。
应用场景:SpringMVC中的HandlerAdapter; InputStreamReader(inputStream);GUI编程中存在大量适配器
网线
电脑/使用
适配器接口
适配器
定义
2、桥接模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化;抽象和实现耦合在一起的时候,先抽成两个维度,x轴y轴,一个维度成为产品的属性,另一个维度继承产品,这个产品就将两个维度桥接起来了。
应用场景:java语音通过JVM实现了平台的无关性(jvm版本代码和操作系统win和mac等桥接);AWT中的peer架构(一个图标在GUI编程中 在 不同操作系统中位置不一样);JDBC驱动程序(驱动接口可以连接不同数据库驱动);
定义
桥接改变复杂继承设计
品牌接口
联想品牌
类型/桥
使用
概念
场景
3、代理模式
代理模式:(Spring的AOP)
动态代理的类是动态生成的,不是程序员写好的。动态代理分为两大类,基于接口的,基于类的。
基于接口:JDK的动态代理(Spring默认)(通过实现implement InvocationHandler这个接口的类,来生成代理类进而处理新增加的业务而不改变原有的UserServiceImpl代码,如上面Spring的AOP进化史三)
基于类:cglib(通过extends UserServiceImpl,继承类似这种具体业务实现类,进而处理新增加的业务而不改变原有的UserServiceImpl代码)
java字节码实现:javasist (针对于Jboss的,我们用的tomcat)