设计模式之单例模式

设计模式(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;
    }
}

你可能感兴趣的:(设计模式之单例模式)