标签: singleton

Android:每个应用程序对应一个HttpClient实例

直到最近,我们的应用程序在整个应用程序中使用ThreadSafeClientConnManager共享一个Apache HttpClient实例.http客户端实例由单例类保存.

由于我不喜欢单例模式存在的众多问题,我将我的API访问器重构为每线程对象,但现在对于每个线程(在我们的情况下主要是指每个Activity/Service),都会创建一个新的HttpClient实例.

这不是我对这种新方法有问题,但我已经读过Apache人员建议每个应用程序只有一个实例出于性能原因.

在视觉上,我们之前做的是:

HttpClient (thread safe)
          |
          |
         /\
        /  \
Activity1...ActivityN
Run Code Online (Sandbox Code Playgroud)

现在,我们这样做:

Activity1 ... ActivityN
    |             |
    |             |
HttpClient1   HttpClientN
Run Code Online (Sandbox Code Playgroud)

你们是如何在你的应用程序中做到这一点的?如果您在应用程序和可能有多个并发线程之间共享一个HttpClient,那么如何处理对它的访问?

concurrency singleton android

20
推荐指数
1
解决办法
5282
查看次数

扩展抽象单例类

如果你有一个工厂类来创建某种新的对象,那个factroy类是一个单例,如下所示:

class Database_Factory extends Base_Factory {
    private static $factory;
    private $objects = array();

    public function __get($profile) {
        // check for object and return it if it's created before
    }

    public static function getInstance(){
        if (!self::$factory)
            self::$factory = new self();
        return self::$factory;
    }
}
Run Code Online (Sandbox Code Playgroud)

当某个对象需要它自己的工厂时,相同的代码会重复.所以我决定将这个工厂类抽象化,并且只为每个工厂实现特定的例程.但PHP不允许实例化抽象类.

abstract class Base_Factory {
    public static function getInstance(){
        if (!self::$factory)
            self::$factory = new self();
        return self::$factory;
    }
}
Run Code Online (Sandbox Code Playgroud)

致命错误:无法实例化抽象类Base_Factory

你会怎么做?

php singleton abstract-class

20
推荐指数
2
解决办法
1万
查看次数

现实生活中的依赖注入

我正在构建一个非常小的MVC框架来增加我的PHP知识并挑战自己.我已经到了类开始依赖彼此工作的地步. 依赖注入似乎是解决方案,并被一些大框架使用.

我在Github上发现了Bucket并且已经搞砸了一段时间才能理解基础知识.然而,我无法理解的是,什么时候创建一个容器是合适的?

制作一个大容器,包括可能需要的每个可能的课程,似乎对我来说只是适得其反,我无法想象这是一个好习惯.这似乎是至少糟糕表现的秘诀.

在替代方案中,即制造多个容器,我仍然不知道如何不再需要那些臭气熏天的单身人士.

假设我有以下代码:

$session_container = new bucket_Container();
$session_container->create('Database');
$session_container->create('Database_Sessions');

$log_container = new bucket_Container();
$log_container->create('Database');
$log_container->create('Database_Log');
Run Code Online (Sandbox Code Playgroud)

所以这里我们有两个容器,或者在这种情况下,用于两个完全不同的用法,它们是相互依赖的Database.

我的逻辑告诉我,上面的代码将创建Database-class的两个独立实例,这意味着我仍然必须使Database-class成为一个单例来确保我的数据库连接的并发实例没有发生?

它是否正确?

php oop singleton dependency-injection

20
推荐指数
2
解决办法
2841
查看次数

使单例成为Spring bean的正确方法

我正在将单例转换为Spring bean,因此如果单例无法初始化,则整个Web应用程序的spring上下文无法正确加载.

使Spring上下文无法正确加载的优点是人们会在部署期间注意并修复配置.与使用'非spring bean'单例相反:当在初始化期间抛出异常时,没有人注意到......直到实际用户抱怨缺少功能.

我的更改正在按预期工作..但我不确定我是否正在做正确的事情.
有什么想法吗?

代码如下所示:

public class MySingleton {

    private static MySingleton INSTANCE = null;
    private MySingleton(){}


public static MySingleton getInstance(){
    if(INSTANCE == null){
        synchronized(MySingleton.class){
            if(INSTANCE == null){
                try{
                    doWork()
                }catch(Exception e){
                    throw new IllegalStateException("xyz", e);
                }
                INSTANCE = new MySingleton();
            }
        }
    }

    return INSTANCE;
}

private static void doWork() {
    // do some work
    }

}
Run Code Online (Sandbox Code Playgroud)

在spring config xml中,bean将被定义为:

<bean id="MySingletonBean"
    class="com.MySingleton"
    factory-method="getInstance" lazy-init="false" singleton="true">
</bean>
Run Code Online (Sandbox Code Playgroud)

注意: 大部分内容类似于本文中讨论的策略:http: //springtips.blogspot.com/2007/06/configuration-hell-remedy-with.html


编辑1:

使用这个单例的类不是spring bean本身..它们只是非春天的pojos,我无法转换为spring.他们必须依靠getInstance()方法来获取Singleton.


编辑2 :( …

java singleton spring

20
推荐指数
4
解决办法
9万
查看次数

如何使用Mockito/Powermock模拟枚举单例类?

我不确定如何模拟枚举单例类.

public enum SingletonObject{
  INSTANCE;
  private int num;

  protected setNum(int num) {
    this.num = num;
  }

  public int getNum() {
    return num;
  }
Run Code Online (Sandbox Code Playgroud)

我想在上面的例子中存根getNum(),但我无法弄清楚如何模拟实际的SingletonObject类.我认为使用Powermock准备测试会有所帮助,因为枚举本身就是最终的.

//... rest of test code
@Test
public void test() {
  PowerMockito.mock(SingletonObject.class);
  when(SingletonObject.INSTANCE.getNum()).thenReturn(1); //does not work
}
Run Code Online (Sandbox Code Playgroud)

这是使用PowerMockMockito 1.4.10和Mockito 1.8.5.

java singleton enums mockito powermock

20
推荐指数
1
解决办法
3万
查看次数

跨JVM或Application实例或Tomcat实例的单例

如果我在Tomcat(或任何其他服务器)的单个实例上部署并运行相同应用程序的2个实例.然后将创建一个单独的对象(Singleton类):

  1. 跨越Tomcat的单个实例(但对于同一应用程序的2个实例是常见的)或
  2. 跨应用程序实例(2个应用程序实例不同)

所以基本上我想要理解的是,每个JVM都会创建一个Singleton类的单个对象吗?如果应用程序托管在Web服务器(或容器)上,这是如何工作的.

java singleton webserver tomcat jvm

20
推荐指数
4
解决办法
3万
查看次数

如何模拟Scala单例对象?

我试图模拟Scala单例对象.特别是,我需要模拟play.api.libs.ws.WS服务组件(被测试的类)中使用的对象.使用Mockito这是不可能的,测试执行失败的方式如下:

[error]    MockitoException: : 
[error] Cannot mock/spy class play.api.libs.ws.WS$
[error] Mockito cannot mock/spy following:
[error]   - final classes
[error]   - anonymous classes
[error]   - primitive types  (GeolocationSpec.scala:18)
Run Code Online (Sandbox Code Playgroud)

在这里阅读,似乎Scalamock允许这样做:

要模拟独立的单例对象,请使用 org.scalamock.annotation.mockObject.

我的服务组件是这样的:

trait GeolocationService {
  def wsClient = WS
  def getPath(origin: Location, destination: Location): Future[Route]
}

class DefaultGeolocationService extends GeolocationService {

  val serviceProviderEndpoint = Play.current.configuration.getString("api.directions.endpoint")

  override def getPath(origin: Location, destination: Location): Future[Route] = {

    val params = Seq(
      "origin" -> s"${origin.lat},${origin.lon}",
      "destination" -> s"${destination.lat},${destination.lon}"
    );
    val resp …
Run Code Online (Sandbox Code Playgroud)

testing singleton scala mocking playframework

20
推荐指数
2
解决办法
1万
查看次数

Kotlin的单身人士线程安全吗?

Kotlin单身人士(更具体地说,对象声明)是否通过构造进行线程安全?如果没有,在Kotlin中编写线程安全单例的最佳做法是什么?

我猜它们是,但我无法在文档中找到任何关于它的明确声明.

singleton thread-safety kotlin

20
推荐指数
1
解决办法
2681
查看次数

单例模式如何在Web上下文中工作?

因此,使用单例模式的对象只能有一个实例.这在网站上如何运作?

问题:

  1. 单身对象是否对网站的每个客户/访客都是唯一的?即单个对象是否获得一个PER客户端实例?
  2. Web应用程序中的对象只持续几秒钟,因此如果两个客户端同时访问网站,则两个客户端都将尝试创建单个对象.这是否意味着有人会看到一个例外,游客会看到这个例外情况?我试过谷歌搜索,但找不到直接的答案.我只想找一点澄清.

c# asp.net singleton design-patterns

19
推荐指数
1
解决办法
1万
查看次数

Kotlin线程安全本机懒惰单身与参数

在java中,我们可以使用双重Checked Locking&volatile编写thead-safe单例:

    public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance(String arg) {
        Singleton localInstance = instance;
        if (localInstance == null) {
            synchronized (Singleton.class) {
                localInstance = instance;
                if (localInstance == null) {
                    instance = localInstance = new Singleton(arg);
                }
            }
        }
        return localInstance;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们怎么能用kotlin写呢?


关于对象

object A {
    object B {}
    object C {}
    init {
        C.hashCode()
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用kotlin反编译器来实现

public final class A {
   public static final A INSTANCE;

   private A() { …
Run Code Online (Sandbox Code Playgroud)

singleton multithreading kotlin

19
推荐指数
3
解决办法
1万
查看次数