设计模式

🕵️ 设计模式是什么

设计模式（Design pattern）是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问，设计模式于己于他人于系统都是多赢的，设计模式使代码编制真正工程化，设计模式是软件工程的基石，如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题，每种模式在现在中都有相应的原理来与之对应，每一个模式描述了一个在我们周围不断重复发生的问题，以及该问题的核心解决方案，这也是它能被广泛应用的原因。简单说：

模式： 在某些场景下，针对某类问题的某种通用的解决方案。

场景： 项目所在的环境

问题： 约束条件，项目目标等

解决方案： 通用、可复用的设计，解决约束达到目标。

🗂️ 分类

创建型模式
对象实例化的模式，创建型模式用于解耦对象的实例化过程。

结构型模式
把类或对象结合在一起形成一个更大的结构。

行为型模式
类和对象如何交互，及划分责任和算法。

🔒 单例模式

让某个类只创建一个对象

构造方法私有化 因为创建对象使用构造方法 所以可以通过限制构造方法的使用来限制对象的创建

创建一个用于保存对象的静态变量

对外提供一个用于获取对象的方法 (一定是静态方法)

饿汉模式

Copy
class HungrySingleton {
private HungrySingleton() {
System.out.println("HungrySingleton构造方法执行");
}

static HungrySingleton instance = new HungrySingleton();

static HungrySingleton getInstance() {
return instance;
}
}

特点： 当类被加载时，静态变量instance就会被初始化，此时类的私有构造方法会被调用，单例类的唯一实例将被创建

懒汉模式

Copy
class LazySingleton {
private LazySingleton() {
System.out.println("LazySingleton构造方法执行");
}

private static LazySingleton instance = null;

static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}

特点： 它在第一次被引用的时候才会实例化，即在类加载的时候不会将自己实例化。它在第一次调用getInstance()方法的时候实例化，这种技术又称为延迟加载技术，即在需要的时候才加载实例。