设计模式(Design Pattern)
是一套被反复使用、多数人知晓的经过分类编目的、代码设计经验的总结
设计模式的目的:
使用设计模式是为了可重用代码、
让代码更容易被他人理解、保证代码可靠性。
设计模式的分类:
创建型模式共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。
image.png
设计模式之单例模式:一山不容二虎/古代皇帝只有一个
有些对象我们只需要一个,比如配置文件、工具类、线程池、綬存、日志对象等;如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等
如何保证整个应用中某个实例有且只有一个?
单例模式分为饿汉模式 和 懒汉模式
单例模式 --- 饿汉模式
特点:在加载类时实例化对象。(加载类较慢,但调用较快),非线程安全。
比喻:不管用户有没有调用,只要类加载时,就会实例对象。笨鸟先飞,饿汉才需要去抢夺食物。
class Singleton {
//1.将构造方法私有化,使外部无法直接创建对象
private Singleton() {
}
//2.创建类的唯一实例
//静态成员为类所有,当类被加载时,该行代码就会被加载执行,
//创建类的唯一实例无论用户是否调用和获取该实例,均已被加载执行了
private static Singleton instance = new Singleton();
//3.提供获取实例的方法
public static Singleton getInstance() {
return instance;
}
}
单例模式 --- 饿汉模式
特点:在第一次调用时,实例化对象。加载类时,并没有实例化对象。
(特点加载类较快,调用较慢);线程安全的
class Singleton {
//1.将构造方法私有化,使外部无法直接创建对象
private Singleton() {
}
//2.创建类的唯一实例
private static Singleton instance;
//3.提供获取实例的方法
//当用户获取类的实例时,先进行一个判断,
//若为空,则创建该实例,
//若不空,则直接返回该实例。
public static Singleton getInstance() {
if(instance==null){
instance = new Singleton();
}
return instance;
}
}