当前位置: 代码迷 >> J2SE >> 面试题2(不断优化的多种单例模式实现方式)
  详细解决方案

面试题2(不断优化的多种单例模式实现方式)

热度:33   发布时间:2016-04-24 12:22:06.0
面试题二(不断优化的多种单例模式实现方式)
请你写出一个单例模式来。

  好,这个题目很简单,相信大家都能很快的写出来(写出来立即编译没有错误—当时去IBM面试时候的要求)。
  请大家放心,面试官是不会就这么放过你滴。
  会分别问你:怎么才能更节省资源?多线程情况下怎么样?双重检查方式的单例模式?还有其它的实现方式么?

  一步步进逼,不会让你大喘气滴。

  大家来试试,只要写出下面四种方式的就可以了:
  A:单线程下单例模式;
  B:简单修改A中代码,实现多线程下的单例模式;
  C:双重检查的单例模式;
  D:还有其它实现方式么?


  来吧,大家come on!!!


------解决方案--------------------
Java code
public class ReadWriteTextFile {        private static ReadWriteTextFile rwt;    public static ReadWriteTextFile getRWT(){        if(null==rwt){            rwt=new ReadWriteTextFile();        }        return rwt;    }}
------解决方案--------------------
Java code
public enum ReadWriteTextFile {    Instance;}
------解决方案--------------------
static {
....
}

这样就行了,何必非得需要时才new呢?我只关注结果。现在内存那么便宜。
------解决方案--------------------
单例模式应该是只返回一次一个类的实例 static静态块如何返回一个类的实例呢 因为不能把所有代码方法都写在静态块里吧
------解决方案--------------------
接分得
------解决方案--------------------
Java code
public class SingleTon {    private static SingleTon singleTon = new SingleTon();    private SingleTon(){};        public static SingleTon getInstance() {        return singleTon;    }}
------解决方案--------------------
Java code
class SingleTon2 {    private static SingleTon2 singleTon;    static {        singleTon = new SingleTon2();    }    private SingleTon2(){};        public static SingleTon2 getInstance() {        return singleTon;    }}
------解决方案--------------------
Java code
class SingleTon3 {    private static SingleTon3 singleTon3 = null;        public synchronized SingleTon3 getInstance() {        if (singleTon3 == null) {            singleTon3 = new SingleTon3();        }        return singleTon3;    }    }
------解决方案--------------------
if (instance == null) {
synchronized (instance) {
if (instance == null) {
instance = new XXX();
}
}
}
return instance;

大概这么写 没写过 看人家差不多是这么写得

双重检查是啥。。。
------解决方案--------------------
探讨

Java code
public class ReadWriteTextFile {

private static ReadWriteTextFile rwt;
public static ReadWriteTextFile getRWT(){
if(null==rwt){
rwt=new ReadWriteTextFile()……

------解决方案--------------------
探讨

static {
....
}

这样就行了,何必非得需要时才new呢?我只关注结果。现在内存那么便宜。

------解决方案--------------------
synchronized 我不懂什么双重检查
------解决方案--------------------

╭︿︿︿╮ 

------解决方案--------------------
A:单线程下单例模式;

Java code
public class Singleton {    private static Singleton instance;    private Singleton(){}    public static Singleton getInstance() {        if (instance == null) {            instance = new Singleton();        }        return instance;    }}
  相关解决方案