設計モードの面接構想の推演
1、面接官の質問、話題の牽引
2、単例モード概況
3、怠け者の単例
4、連続質問1:マルチスレッドはどのようにインスタンスが一意ですか?
5、連発2:性能はいいですか.
6、連続質問3:性能的に最適化できますか?
7、連発4:何の問題もありませんか.
8、連続質問5:シーケンス化の影響に対応できますか?
9、連続質問6:反射の影響に対応できますか?
9、連発質問7:匿名のサブクラスは唯一ですか?
10、連発8:唯一の匿名サブクラスは安全ですか?
11、適用性:列挙単例を引き出す
参考:反射、シーケンス化、マルチスレッド化、および単一セキュリティの観点からよく使われる3種類のJAVA単一モード
:
, 。
:
。
!
?
? ? ? ?
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単一モード