jjzjj

Singleton

全部标签

java - 如何使构造函数仅对工厂类可用?

好吧,这个问题可能不是很清楚。让我给出一些细节:假设我有一个名为CFactory的Shoe(CShoe)对象工厂类。CFactory是一个单例类,它使用一个简单的HashMap来创建和存储所有实例化的鞋子。然后通过静态方法访问它以使用创建的对象。有没有办法强制CShoe的构造函数只能由工厂调用?(也就是说,保证鞋子的创建只能由鞋厂单例类完成,不能由其他类完成) 最佳答案 你可以让Shoe成为ShoeFactory的内部类:publicclassShoeFactory{publicstaticclassShoe{privateStri

java - 为什么在生产者中使用 @Singleton 而不是 @ApplicationScoped?

LoggerProducer.java是一个用于生成要注入(inject)CDIbean中的记录器的类:@InjectLoggerLOG;完整代码:importjavax.ejb.Singleton;/***@authorrveldpau*/@SingletonpublicclassLoggerProducer{privateMaploggers=newHashMap();@ProducespublicLoggergetProducer(InjectionPointip){Stringkey=getKeyFromIp(ip);if(!loggers.containsKey(key)){

java - 我们什么时候应该在 Java 中使用 Singleton 类?

按照我的想法,当我们在整个应用程序中共享相同的对象状态时,我们应该创建一个单例类。在那种情况下,我们希望用户限制每次都创建一个新实例,这样他们就无法维护多个状态。同意。但是可以通过将实例变量声明为静态来实现相同的行为。在我看来,无论是cacheobjectcontainer、logger还是Classloader类,它都将起到相同的作用。请帮助我理解上面的概念,其中静态实例变量不能解决目的并且需要将类声明为Singleton?编辑部分好吧,让我更清楚一点。单例类的目的是跨jvm只保留单例类的一个实例。同意。但我想想想为什么我们只想保留一个实例。可能有两个原因:1)对象的创建成本可能很高

java - 在与外部同步相同的对象上进行内部同步

最近我参加了一个关于一些设计模式的讲座:显示了以下代码:publicstaticSingletongetInstance(){if(instance==null){synchronized(Singleton.class){//1Singletoninst=instance;//2if(inst==null){synchronized(Singleton.class){//3inst=newSingleton();//4}instance=inst;//5}}}returninstance;}取自:Double-checkedlocking:Taketwo我的问题与上述模式无关,但与同

java - 单例模式

这个问题和我之前的问题一样,引用了EffectiveJava。这次我有很多子问题。特权客户端可以借助AccessibleObject.setAccessible()方法以反射方式调用私有(private)构造函数。如果您需要对此进行防御,请修改构造函数。究竟如何调用私有(private)构造函数?什么是AccessibleObject.setAccessible()?你们专家对单例采用什么方法?//ApproachApublicclassTest{publicstaticfinalTestTestInstance=newTest();privateTest(){...}...}//Ap

java - 单例对象——在静态 block 中或在 getInstance() 中;应该使用哪个

下面是实现单例的两种方式。各有什么优缺点?静态初始化:classSingleton{privateSingletoninstance;static{instance=newSingleton();}publicSingletongetInstance(){returninstance;}}惰性初始化是:classSingleton{privateSingletoninstance;publicSingletongetInstance(){if(instance==null)instance=newSingleton();returninstance;}} 最

java - 为什么 private static field = new Singleton 在 Java 中不懒惰?

我看了很多关于Singleton的文章,其中大部分作者都说Java中Singleton的这种变体:publicclassSingleton{privatestaticSingletoninstance=newSingleton();privateSingleton(){}publicstaticSingletongetInstance(){returninstance;}}是不懒惰(然后是EAGER)。但我不明白为什么,Singleton()构造函数只会在Singleton类初始化时被调用。我知道几个可以触发类初始化的原因:将new与构造函数一起使用(但在这种情况下,构造函数是私有(p

java - 来自维基百科的单例模式实现

我指的是solutionfortheSingletonPatternbyBillPugh在维基百科上:publicclassSingleton{//PrivateconstructorpreventsinstantiationfromotherclassesprivateSingleton(){}/***SingletonHolderisloadedonthefirstexecutionofSingleton.getInstance()*orthefirstaccesstoSingletonHolder.INSTANCE,notbefore.*/privatestaticclassSi

java - 在 java 中具有子类化的单例

在java中实现单例的最常见方法是使用具有以下形式的公共(public)访问器方法的私有(private)构造函数--publicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticsynchronizedSingletongetInstance(){if(instance==null){instance=newSingleton();}returninstance;}}但是,由于构造函数是私有(private)的,因此它阻止了对单例的子类化。有什么方法可以创建允许子类化的

java - 单例类方法的并发调用

我有一个单例类:publicclassSingleton{privatestaticSingletonistance=null;privateSingleton(){}publicsynchronizedstaticSingletongetSingleton(){if(istance==null)istance=newSingleton();returnistance;}publicvoidwork(){for(inti=0;i并且多个线程正在调用work()函数:publicclassMain{publicstaticvoidmain(String[]args){newThread(