一、爲什麼用設計模式?
使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
如代理模式可以請求打印日誌信息,工廠模式可以負責初始化一些,觀察者模式可以對事件的監聽,單例模式,一定會手寫單例
策略設計模式
二、設計模式分類
設計模式總共23種,分爲三類:
1.創建型:共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
2.結構型:共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
3.行爲型:共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
三、懶漢式和餓漢式
懶漢式:
package Singleton;
/*懶漢式單例模式
* */
class Single{
private static Single single;
public static Single getSingle(){
if (single==null){
synchronized (Single.class){
single = new Single();
}
}
return single ;
}
/*爲什麼在java中單例設計模式要私有化該類構造函數?
因爲只有構造函數私有化了,纔不能用new方法來創建對象,new創建對象時創建的是構造函數,如果可以用new方法就可以創建多個實例了,就不是單例模式了
* */
private Single(){
}
}
public class SingletonTest {
public static void main(String[] args) {
// Single single = new Single();
Single single1 = Single.getSingle();
Single single2 = Single.getSingle();
// System.out.println(single==single1);
System.out.println(single1==single2);
}
}
餓漢式:
package Singleton;
/*餓漢試單例模式
* */
class Single2{
private Single2(){
}
private static final Single2 single2=new Single2();
public static Single2 getSingle(){
return single2;
}
}
public class SingleTest2 {
public static void main(String[] args) {
Single2 single1 = Single2.getSingle();
Single2 single2 = Single2.getSingle();
System.out.println(single1==single2);
}
}
懶漢式和餓漢試比較有哪些優缺點:
懶漢式節約內存,但是線程不安全,需要使用synchornized,運行效率低。餓漢式天生線程安全,執行效率高。