設計模式(單例模式和原型模式)

設計模式

最近出去面試,發現自己對設計模式上面有點生疏了,也的的確確忘了很多,這邊就稍微的鞏固一下自己的設計模式.面試官也說到了,你如果都不知道這些設計模式的存在,你怎麼知道要去使用他, 一直去了解分佈式結構的使用,卻忘了最基本的東西的確該打.

單利模式

單利模式,我相信我們在開發過程中最容易碰見,我連這個都忘記了.果然不行.

懶漢式單例模式
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之間方法的單利已經存在了.

單利模式的應用場景
  1. 在我只需要一個對象實例的時候.
  2. 當某類需要頻繁實例化,而創建的對象又頻繁被銷燬的時候.

說白了,不需要重複的獲取這個類的時候,就可以考慮用單利模式, 我實際工作中就是在調用第三方接口的時候使用過.

原型模式

其實說原型模式,我個人更加覺得是克隆模式, 主要原理就是實現Cloneable類 來重寫clone() 方法, 直接就能返回一個類型一樣的對象,但是對象的地址是不相等的.

public class TestController implements Cloneable{
	//實現cloneable接口 重寫方法clone 返回對象自己
    @Override
    protected TestController clone() throws CloneNotSupportedException {
        return (TestController) super.clone();
    }
}

工作中有可以用上, 需要調用相似功能的類, 就可以使用原型模式開發.

什麼時候使用場景

1.對象之間相同或相似,即只是個別的幾個屬性不同的時候。
2.對象的創建過程比較麻煩,但複製比較簡單的時候。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章