设计模式总共23种,可以归结为3大类
- 创建型:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
- 结构型:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
- 行为型:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
比较常用的设计模式有:单例模式、工厂模式、代理模式、构造者模式、责任链模式、适配器模式、观察者模式等。
单例模式
单例模式是最常见的设计模式了,这里主要说一下这种设计模式的实现方式
- 静态初始化方式(饿汉方式),顾名思义,也就是在初始类的时候实现单例的创建,这种方式不会产生并发问题,缺点是无论会不会使用都会创建对象占用资源。
- 双重检查方式(懒汉方式),这种方式就是只有在真正使用的时候才去初始化单例,这样就不可避免的有并发问题了,这里可以加 synchronized 或者 lock。
- 单例注册表方式,其实也就是 Spring 中 Bean 的单例模式。
工厂模式
工厂模式主要用来创建不通的实例,例如 Spring 中各种 Bean 的创建。
代理模式
代理模式就是指不直接引用另一个对象,可以通过这种方式对被代理对象的访问进行控制。其中代理模式又分为静态代理和动态代理,静态代理就是指写死在源代码里的,动态代理是指在 JVM 运行过程中动态创建的代理类,一般有 JDK 动态代理、CGLIB 等。
构造者模式
构造者模式主要适用于一个对象有很多复杂的属性,需要根据不同情况创建不同的具体对象,就是我们平时用的 builder 模式。
责任链模式
责任链模式有点像工厂的流水线,链上每一个节点完成对对象的某一种处理。
适配器模式
适配器模式就是把两种不匹配的对象进行适配,类似于转接头,例如 SLF4J 。
观察者模式
观察者模式也叫做发布订阅模式,意指一个对象的行为会触发其他一系列的事件。