前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单例模式与getInstance()

单例模式与getInstance()

作者头像
长安不见使人愁
发布2022-11-01 15:35:53
5140
发布2022-11-01 15:35:53
举报
文章被收录于专栏:给时光以生命

总结

getInstance这个方法在单例模式用的甚多,主要是为了避免对内存造成浪费,仅在需要实例化该类的时候才将其实例化。至于其他时候,也就是为了简便而已,在实例化对象的时候不必每次都new,索性提供一个instance方法。

代码语言:javascript
复制
class OneClass {

    private OneClass() {
    }

    private static OneClass instance = null;

    public static synchronized OneClass getInstance() {
        if (instance == null) {
            instance = new OneClass();
        }
        return instance;
    }

}
  • 1.这便是单例模式的经典用法,一般用于比较大,复杂的对象,只初始化一次。必须有一个private的构造函数,使得不能用new来实例化对象,只能调用getInstance方法来得到对象,而getInstance保证了每次调用都返回相同的对象。
  • 2.实例化对象最常用的方法是使用new,如果要考虑到其它的需要,如单实例模式,层次间调用等,直接使用new是不好实现的,这时候就要间接使用new,即getInstance方法。这是一个设计方式的代表,而不仅仅指代一个方法名。
  • 3.new和getInstance的区别 大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每次调用都是一个新的对象。getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。
    • 1)对象使用之前通过getInstance得到而不需要自己定义,用完之后不需要delete;
    • 2)new会生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;
    • 3)new创建后只能单次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。因为getInstance()通常是创建static静态实例方法的。

Q.E.D.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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