2013-09-27 50 views
2

最近我在一次采访中被问到:你如何在Java中实现Singleton设计模式?Java中的单例模式实现

我有点困惑,因为有2个选项:

1)只要有一个静态数据成员。静态成员,例如

private static Logger logger; 

将确保只有一个记录器的给定类的所有对象之间共享。

2)实施实例,控制器,限制实例:

public class LoggerWrapper { 
     private static Logger instance = null; 

     private LoggerWrapper() {  } 

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

的是这2种单方法之间的区别?

+1

“实例”字段需要是“静态”。 –

+0

和'final'以及 –

+1

那么,你的第二个代码将不会编译。 –

回答

1

第一个不能在班级以外访问。第二个可以被其声明的类以外的类使用。正如Sotirios Delimanolis指出的那样,实例需要是静态的,以便静态getInstance()方法可以访问它,确保所有调用者获得相同的版本。

请注意,有一个LOTproblems与单身人士,你应该认真思考,然后再实施一个。