首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java单例模式

Java单例模式

作者头像
Breeze.
发布2022-04-11 14:56:40
发布2022-04-11 14:56:40
5340
举报

单例模式

  • 要点:
    1. 某个类只能由一个实例
    2. 必须自行创建实例
    3. 必须自行向整个系统提供这个实例
  • 实现:
    1. 只提供私有的构造方法
    2. 含有一个该类的静态私有对象
    3. 提供一个静态的公有方法用于创建、获取静态私有对象
  • 代码实现方案:
代码语言:javascript
复制
public class SingletonOne {
    /**
     * 饿汉式:创建对象实例的时候直接初始化  空间换时间的操作形式
     */
    //1、创建类中私有构造
    private SingletonOne(){

    }

    //2、创建该类型的私有静态实例
    private static SingletonOne instance=new SingletonOne();

    //3、创建共有静态方法返回静态实例对象
    public static SingletonOne getInstance(){
        return instance;
    }
}
代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        /*通过类名.对象的方式*/
        SingletonOne one=SingletonOne.getInstance();
        SingletonOne two=SingletonOne.getInstance();
        System.out.println(one+"\n"+two);
    }
}

结果:

代码语言:javascript
复制
public class SingletonTwo {
    /**
     * 懒汉式: 类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作
     */
    /*1、创建该类型的私有静态实例*/
    private SingletonTwo(){
​
    }
​
    /*2、创建该类型的私有静态实例对象*/
    private static SingletonTwo instance=null;
​
    /*3、创建静态开放的方法提供实例对象*/
    public static SingletonTwo getInstance(){
        if (instance==null)
            instance=new SingletonTwo();
        return instance;
    }
}
代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        SingletonTwo three=SingletonTwo.getInstance();
        SingletonTwo four=SingletonTwo.getInstance();
        System.out.println(three+"\n"+four);
    }
}

结果:

使用场景

  1. 创建对象时占用资源多,但同时又需要用到该类对象
  2. 对系统内资源要求统一读写,如读写配置信息
  3. 当多个实例存在可能引起程序逻辑错误,如号码生成器
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单例模式
    • 使用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档