1、單例模式
單例模式的六種方式
https://www.cnblogs.com/z00377750/p/9136821.html
餓漢式,在類加載的時(shí)候生成實(shí)例,需要實(shí)例的時(shí)候可以直接提供(像個(gè)急切的餓漢)。但是這個(gè)實(shí)例可能并不會(huì)用到,類加載的時(shí)候?qū)嵗惋@得沒有必要。解決方式有兩種:第一種是使用靜態(tài)內(nèi)部類的形式。第二種是使用懶漢式。懶漢式可能會(huì)有線程安全問題,于是產(chǎn)生了雙重檢測機(jī)制(DCL)的懶漢式。
單例模式的破壞
https://blog.csdn.net/hqy1719239337/article/details/83028387
防止序列化和反序列化時(shí)破壞:
在Singleton中定義readResolve方法,并在該方法中指定要返回的對(duì)象的生成策略
private Object readResolve(){
return instance;
}
防止反射破壞:
在構(gòu)造方法中增加判斷
private Singleton() {
if (null != SingletonClassInstance.instance)
throw new RuntimeException();
}
或者
private Singleton(){
if(flag){
flag=false;
}
else {
throw new RuntimeException("單例模式遇到攻擊,第二個(gè)對(duì)象未創(chuàng)建成功");
}
}
2、命令模式
結(jié)合Hystrix中的應(yīng)用
3、策略模式
結(jié)合線程池的拒絕策略