详解 JDK源码里的设计模式

你好呀,我是猿java。

设计模式,不管是在前端开发,还是后端开发,求职面试中似乎总有它的身影。身为 Java后端人员,更加能体会到它的重要性,JDK源码,Spring等流行的开源框架,设计模式更是不可或缺,
因此,今天,我们就来分享 23种经典的设计模式以及JDK中蕴藏了哪些经典的模式。

设计模式的分类

23种经典设计模式,按照目的可以分为三类:创建型模式、结构型模式和行为型模式。

Creational Patterns(创建型模式) 5种

  • Singleton Pattern(单例模式)
  • Factory Method Pattern(工厂方法模式)
  • Abstract Factory Pattern(抽象工厂模式)
  • Builder Pattern(建造者模式)
  • Prototype Pattern(原型模式)

Structural Patterns(结构型模式)7种

  • Proxy Pattern(代理模式)
  • Adapter Pattern(适配器模式)
  • Decorator Pattern(装饰器模式)
  • Facade Pattern(外观模式)
  • Bridge Pattern(桥接模式)
  • Composite Pattern(组合模式)
  • Flyweight Pattern(享元模式)

Behavioral Patterns(行为型模式)11种

  • Strategy Pattern(策略模式)
  • Template Method Pattern(模板方法模式)
  • Observer Pattern(观察者模式)
  • Iterator Pattern(迭代器模式)
  • Chain of Responsibility Pattern(责任链模式)
  • Command Pattern(命令模式)
  • Memento Pattern(备忘录模式)
  • State Pattern(状态模式)
  • Visitor Pattern(访问者模式)
  • Mediator Pattern(中介者模式)
  • Interpreter Pattern(解释器模式)

设计模式详解

Singleton Pattern(单例模式)

一个类只允许创建一个实例(或对象),单例模式比较简单,常见有3种实现方式:

饿汉式(Eager Initialization):

在类加载时就创建实例,保证在多线程环境下也能正常工作。示例代码如下:
img.png

懒汉式(Lazy Initialization):

和饿汉式模式相反,懒汉式并不是在类加载时创建实例,而是需要在第一次使用时才创建实例,示例代码如下:
img.png

懒汉式并无法保证多线程情况下的线程安全性,通过双重检查来减小锁的范围以及保证线程安全

双重检查锁(Double-Checked Locking):

img.png

枚举

枚举是天然的单例模式,也是Effective Java 建议的方式,示例代码如下:
img.png

JDK 源码里的设计模式

参考

Examples of GoF Design Patterns in Java’s core libraries

交流学习

最后,把猿哥的座右铭送给你:投资自己才是最大的财富。由于水平有限,如果文章存在缺点和错误,欢迎批评指正。感谢转发给更多的好友,关注我:猿java,为你呈现更多的硬核文章。

drawing