单例模式

76 阅读2分钟

​ ​​持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

 设计模式常用的主要有23种:

创建型模式(关注创建过程的):工厂方法模式,建造者模式,抽象工厂模式,原型模式

结构型模式(关注类和对象组合):桥接模式,代理模式,享元模式,外观模式,装饰器模式,组合模式,适配器模式

行为型模式(关注对象间的通信过程):备忘录模式,解释器模式,命令模式,中介者模式,观察者模式,策略模式,状态模式,模板方法模式,访问者模式,迭代子模式,责任链模式

单例模式:

目的:使得类的一个对象成为该系统中的唯一实例

定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供

要点:

1、  某个类只能有一个实例

2、  必须自行创建实例

3、  必须自行向整个系统提供这个实例

实现:

1、  只提供私有的构造方法

2、  含有一个该类的静态私有对象

3、  提供一个静态的公有方法用于创建、获取静态私有对象

饿汉式(对象创建过程中就实例化,以空间换时间,速度快,空间大):

//1、创建类中私有构造

private SingletononOne(){

 

}

//2、创建该类的私有静态实例

private static SingletonOne instance=newSingletonOne();

//3、创建公有静态方法返回静态实例对象

public static SingletonOne getInstance(){

         return instance;

}

懒汉式(静态公有方法实例化,用时间换空间):类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作。

//1、创建类中私有构造

private SingletonTwo(){

 

}

//2、创建该类的私有静态实例

private static SingletonTwo instance=null;

//3、创建公有静态方法返回静态实例对象

public static SingletonTwo getInstance(){

         if(instance==null)

                   instance=newSingleonTwo();

         return instance;

}

饿汉式线程安全

懒汉式存在线程风险(可以通过以下方法解决):

1、  同步锁

2、  双重校验锁

3、  静态内部类

4、  枚举

单例模式的优点:

1、  在内存中只有一个对象,节省内存空间

2、  避免频繁的创建销毁对象,提高性能

3、  避免对共享资源的多重占用

单例模式的缺点;

1、  扩展比较困难

2、  如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失。

单例模式的食用场景:

1、  创建对象时占用资源过多,但同时又需要用到该类对象

2、  对系统内资源要求统一读写,如读写配置信息

3、  当多个实例存在可能引起程序逻辑错误,如号码生成器 ​