Tag: 单身人士

这是哪种单身人士?

public class ConnectionManager { private static Map managerInstances = new HashMap(); private String dsKey; private ConnectionManager(String dsKey){ this.dsKey = dsKey; } public static ConnectionManager getInstance(String dsKey){ ConnectionManager managerInstance = managerInstances.get(dsKey); if (managerInstance == null) { synchronized (ConnectionManager.class) { managerInstance = managerInstances.get(dsKey); if (managerInstance == null) { managerInstance = new ConnectionManager(dsKey); managerInstances.put(dsKey, managerInstance); } } } […]

实现Singleton模式以在任何地方访问对象

目前,我有一个类,其构造函数采用用户名,密码和上下文。 我希望能够从任何地方访问这个对象,所以我想实现一个单例模式。 当前构造函数使用传入的凭据来validation通过该类的未来api调用。 如果我要实现单例模式,我首先想到的是让getInstace()方法获取用户名,密码等等,但每次我抓住一个实例时都必须传递该信息似乎是错误的。 因此我想在添加第一个实例时添加某种.authenticate(usr, pswrd)方法。 我的问题是,这是正确的方法吗? 如果没有,那么处理这个问题的好方法是什么? 下面是当前的代码: 构造函数: public Play(String username, String password, Context context) { api = getApi(username, password); Intent intent = new Intent(context, MyService.class); context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE); //check if first run //if so, call api for info and store locally //if not, update as needed SharedPreferences pref = context.getSharedPreferences(“pref”, Context.MODE_PRIVATE); SharedPreferences.Editor […]

这是确保Java中只存在一个对象的单个实例的有效方法吗?

我在Mongodb中遇到了一些奇怪的错误,在Mongodb中,你应该使用Mongo单例。 我只是想确保这是有效的。 public class DBManager { public static Mongo mongoSingleton = null; public static synchronized void getMongo(){ if(mongoSingleton == null){ mongoSingleton = new Mongo(); } return mongoSingleton; } } 谢谢!

Android – 谷歌对单身人士模式的矛盾

我一直在阅读关于Android中Singleton模式使用的一些内容以及它在保持Context方面的缺点。 实际上,当我实现以下代码时: private static HttpManager sSingleton; private Context mContext; private HttpManager(Context context) { mContext = context; } public static synchronized HttpManager getInstance(Context context) { if (sSingleton == null) { sSingleton = new HttpManager(context); } return sSingleton; } Android Studio向我显示以下警告: 不要将Android上下文类放在静态字段中(静态引用HttpManager,其中字段mContext指向Context); 这是内存泄漏,也会破坏Instant Run。 但是,我可以在Android的文档页面中看到Singletons的实现和推荐。 如果您的应用程序不断使用网络,那么设置RequestQueue的单个实例可能是最有效的,该实例将持续您的应用程序的生命周期。 您可以通过各种方式实现这一目标。 推荐的方法是实现封装RequestQueue和其他Volleyfunction的单例类。 由于谷歌自相矛盾,有人可以指导我并就此提出建议吗?

维基百科的单例模式实现

我指的是Bill Pugh在维基百科上的Singleton Pattern的解决方案 : public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() {} /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public […]

当两个线程同时调用“getInstance()”时,Singleton如何表现?

当两个线程同时调用“getInstance()”时,Singleton如何表现? 保护它的最佳做法是什么?

如何使其他类派生自单例类?

我很抱歉,如果这是重复或太基础,但我如何创建一个可以被子类化的单例类?

Singleton模式结合了延迟加载和线程安全性

我正在做一些关于单身人士的研究,特别是关于单身人士的懒惰与急切初始化。 急切初始化的一个例子: public class Singleton { //initialzed during class loading private static final Singleton INSTANCE = new Singleton(); //to prevent creating another instance of Singleton private Singleton(){} public static Singleton getSingleton(){ return INSTANCE; } } 但如上所示,它是急切的初始化和线程安全留给jvm但现在,我希望有相同的模式,但延迟初始化。 所以我想出了这个方法: public final class Foo { private static class FooLoader { private static final Foo INSTANCE = new Foo(); […]

单身模式面试

我最近在接受以下代码的采访时被问及java相关的问题,因为我是java的新手,几乎没有Java代码,所以我真的不知道下面的代码是做什么的。 问题是使用以下代码选择描述最糟糕事情的选项: public class Bolton { private static Bolton INST = null; public static Bolton getInstance() { if ( INST == null ) { INST = new Bolton(); } return INST; } private Bolton() { } } 以下是此问题的选项 可以创建多个Bolton实例 永远不会创造博尔顿 构造函数是私有的,无法调用 可以对值进行垃圾回收,并且对getInstance的调用可能会返回垃圾数据 以上哪个选项是正确的? 为什么?

单身模式

像我之前的问题一样,这个问题引用了Effective Java 。 这次我有很多子问题。 特权客户端可以借助AccessibleObject.setAccessible()方法reflection性地调用私有构造函数。 如果您需要防范此操作,请修改构造函数。 究竟如何调用私有构造函数? 什么是AccessibleObject.setAccessible() ? 您的专家对单身人士采用什么方法? // Approach A public class Test{ public static final Test TestInstance = new Test(); private Test(){ … } . . . } // Approach B public class Test{ private static final Test TestInstance = new Test(); private Test(){ … } public static Test getInstance() { […]