设计模式
是软件开发人员在软件开发过程中面临的一般问题的解决方案
单例模式
目的:使得类的一个对象成为该类系统中的唯一实例
定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供
因此,设计要点是:
某个类只能有一个实例
必须自行创建实例
必须自行向整个系统提供这个实例
实现:
只提供私有的构造方法
含有一个该类的静态私有对象
提供一个静态的公有方法用于创建、获取静态私有对象
代码实现方案:
饿汉式
懒汉式
饿汉式
类加载时,静态实例对象完成了实例化操作;空间换时间。(对象创建过程中实例化)
饿汉式线程安全
新建文件SingletonOne.java
/** * 饿汉式 */public class SingletonOne { //1.创建类中的私有构造函数 private SingletonOne(){ } //2.创建该类型的私有静态实例 private static SingletonOne instance = new SingletonOne(); //3.创建公有静态方法返回静态实例对象 public static SingletonOne getInstance(){ return instance; } }
新建文件Test.java
public class Test { public static void main(String[] args) { SingletonOne one = SingletonOne.getInstance(); SingletonOne two = SingletonOne.getInstance(); System.out.println(one); System.out.println(two); } }
输出结果可以看到是同一个类的地址。
懒汉式
类加载时并未实例化,第一次使用时才进行实例化;时间换空间。(静态公有方法中实例化)
懒汉式存在线程风险
懒汉式线程安全的解决方案:(此处大致介绍下,后边在线程篇会详细介绍)
同步锁
双重校验锁
静态内部类
枚举
新建文件:SingletonOne.java
public class SingletonTwo { //1.创建私有构造方法 private SingletonTwo(){ } //2.创建静态的该类实例对象 private static SingletonTwo instance = null; //3.创建开放的静态方法提供实例对象 public static SingletonTwo getInstance(){ if(instance == null) instance = new SingletonTwo(); return instance; } }
新建文件Test.java
public class Test { public static void main(String[] args) { SingletonTwo one = SingletonTwo.getInstance(); SingletonTwo two = SingletonTwo.getInstance(); System.out.println(one); System.out.println(two); } }
输出结果同上饿汉式代码
单列模式的特点以及应用场景
优点:
在内存中只有一个对象,节省内存
避免频繁的创建和销毁对象,提高性能
避免对共享资源的多重占用
缺点:
扩展比较困难
如果实例化后的对象长期不利用,系统将默认认为垃圾,进行回收,造成对象状态丢失
使用场景:
创建对象时占用资源过多,但同时又需要用到该类对象
对系统内资源要求统一读写,如读写配置信息
当多个实例存在可能引起程序逻辑错误,如号码生成器
作者:好姑凉丶
链接:https://www.jianshu.com/p/8d9f3dff2e1e
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦