为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门之初识设计模式---单列模式

标签:
Java

设计模式

是软件开发人员在软件开发过程中面临的一般问题的解决方案

单例模式

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

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

因此,设计要点是:

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

  2. 必须自行创建实例

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

实现:

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

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

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

代码实现方案:

  1. 饿汉式

  2. 懒汉式

饿汉式

类加载时,静态实例对象完成了实例化操作;空间换时间。(对象创建过程中实例化)

饿汉式线程安全

新建文件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);
    }
}

输出结果同上饿汉式代码

单列模式的特点以及应用场景

优点:

  • 在内存中只有一个对象,节省内存

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

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

缺点:

  • 扩展比较困难

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

使用场景:

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

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

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



作者:好姑凉丶
链接:https://www.jianshu.com/p/8d9f3dff2e1e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
229
获赞与收藏
1002

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消