設計模式
最近出去面試,發現自己對設計模式上面有點生疏了,也的的確確忘了很多,這邊就稍微的鞏固一下自己的設計模式.面試官也說到了,你如果都不知道這些設計模式的存在,你怎麼知道要去使用他, 一直去了解分佈式結構的使用,卻忘了最基本的東西的確該打.
單利模式
單利模式,我相信我們在開發過程中最容易碰見,我連這個都忘記了.果然不行.
懶漢式單例模式
public class LanHan{
//volatile 保證了併發問題, 使得多個線程都能夠使用到最新的變量
private static volatile LanHan lanhan = null;
// 保障了不會被外部類實例化
private LanHan(){};
public static sychronized LanHan getLanHan(){
if(lanhan == null){
lanhan = new LanHan();
}
return lanhan;
}
}
這裏一定需要記住 如果需要保障併發問題 需要用到 volatile ,和sychronized這個關鍵字
餓漢式單例模式
public class EerHan{
//直接new了
private static final EerHan eerhan = new EerHan();
private ErtHan(){};
public static EerHan getEerHan(){
return eerhan;
}
}
保證了類一旦加載就會創建單利模式,保證了再調用getEerHan之間方法的單利已經存在了.
單利模式的應用場景
- 在我只需要一個對象實例的時候.
- 當某類需要頻繁實例化,而創建的對象又頻繁被銷燬的時候.
說白了,不需要重複的獲取這個類的時候,就可以考慮用單利模式, 我實際工作中就是在調用第三方接口的時候使用過.
原型模式
其實說原型模式,我個人更加覺得是克隆模式, 主要原理就是實現Cloneable類 來重寫clone() 方法, 直接就能返回一個類型一樣的對象,但是對象的地址是不相等的.
public class TestController implements Cloneable{
//實現cloneable接口 重寫方法clone 返回對象自己
@Override
protected TestController clone() throws CloneNotSupportedException {
return (TestController) super.clone();
}
}
工作中有可以用上, 需要調用相似功能的類, 就可以使用原型模式開發.
什麼時候使用場景
1.對象之間相同或相似,即只是個別的幾個屬性不同的時候。
2.對象的創建過程比較麻煩,但複製比較簡單的時候。