設計モードの面接構想の推演


1、面接官の質問、話題の牽引
  :
               ,          。
  :
                     。
          !
          ?
           ?      ?       ?           ?

2、単例モード概況
    ,               ,    ,    
      :
             ,          

3、怠け者の単例
1、      ,         。
                   。


public class Singleton {
	private static  Singleton stu=null;
	private Singleton() {		
	}
	public static Singleton getInstance() {
        if(stu==null){
            return new Singleton();
        }
        return stu;		
	}
}


        static,      static。

4、連続質問1:マルチスレッドはどのようにインスタンスが一意ですか?
  :
                 
    
public class Singleton {
	private static  Singleton stu=null;
	private Singleton() {		
	}
	public static synchronized Singleton getInstance() {
        if(stu==null){
            return new Singleton();
        }
        return stu;	
	}
}

5、連発2:性能はいいですか.
  :
              

public class Singleton {
	private static  Singleton stu=null;
	private Singleton() {		
	}
	public static Singleton getInstance() {
        synchronized (""){
            if(stu==null){
                return new Singleton();
            }
            return stu;	
        }
	}
}

     

6、連続質問3:性能的に最適化できますか?
  :
         


public class Singleton {
	private static  Singleton stu=null;
	private Singleton() {		
	}
	public static Singleton getInstance() {
        if(stu==null){
            synchronized (""){
                if(stu==null){
                    return new Singleton();
                }
            }
        }
        return stu;	
	}
}

7、連発4:何の問題もありませんか.
  :
    jvm             ,               。
  :
      volatile                           

public class Singleton {
	private static  volatile Singleton stu=null;
	private Singleton() {		
	}
	public static Singleton getInstance() {
        if(stu==null){
            synchronized (""){
                if(stu==null){
                    return new Singleton();
                }
            }
        }
        return stu;	
	}
}


     ,        

8、連続質問5:シーケンス化の影響に対応できますか?
  :
                         。
  :
         static,     。

      

9、連続質問6:反射の影響に対応できますか?
  :
                      

  :
        abstract,       ,           
                 ,                。

public abstract class Singleton {
	private static  volatile Singleton stu=null;
	private Singleton() {		
	}
	public static Singleton getInstance() {
        if(stu==null){
            synchronized (""){
                if(stu==null){
                    return new Singleton(){};
                }
            }
        }
        return stu;	
	}
}

 abstract          

9、連発質問7:匿名のサブクラスは唯一ですか?
  :
    private            

10、連発8:唯一の匿名サブクラスは安全ですか?
  :
                ,   null,              ,     。

       :
    
public abstract class Singleton {
	private static  final Singleton stu=new Singleton(){};
	private Singleton() {		
	}
}


 final volatile      
volatile                  ,final              。

11、適用性:列挙単例を引き出す
  :
    static       ,                   

     :

public  enum Student {
	STU()
}
    
public  enum Student {
	STU("lucy");
	private String name;
	private Student(String name) {
		this.name=name;
	}
}


              、  、   、     。



参考:反射、シーケンス化、マルチスレッド化、および単一セキュリティの観点からよく使われる3種類のJAVA単一モード