單例模式
單例物件的類必須保證只有乙個例項存在。
使用場景:
需要頻繁的例項化然後銷毀的物件
建立物件時耗時過多或者消耗資源過多,但又經常用的的物件。
有狀態的工具類物件。
頻繁訪問資料庫或檔案的物件。
有狀態:就是有儲存資料的功能,有狀態物件,就是有例項變數的物件,可以儲存資料,非執行緒安全常見寫法:無狀態:就是一次操作,不儲存資料,無狀態物件,就是沒有例項變數的物件,不儲存資料,不變類,執行緒安全
惡漢式
public class singleton
public static singleton getinstance()
}
懶漢式
public class singleton
public static singleton getinstance()
return singleton;
}}
雙重檢查鎖
volatitle禁止指令重排,所有的寫(write)操作都將發生在讀(read)操作之前。例項化物件的過程,1. 分配記憶體空間,2.初始化物件,3.將物件指向剛分配的記憶體空間,編譯器為了效能原因,將2和3重排序,
public class singleton
public static singleton getinstance()}}
return singleton;
}}
匿名內部類
jvm會保證乙個類的初始化方法會在多執行緒環境中正確加鎖,同步,如果多個執行緒去初始化同乙個類,只有乙個執行緒執行初始化方法,其他執行緒會阻塞,注意當乙個執行緒執行完畢初始化方法後,其他執行緒被喚醒也不會執行初始化方法了,乙個類只會初始化一次
public class singleton
private static class sinleton01
public static singleton getinstance()
}
列舉類
public enum singleton
注:可以通過反射破壞單利
public class client
}
也可阻止,在私有的構造方法中加乙個判斷。
private singleton()
}
命令模式
包含角色
**
/**
* 抽象接收者,每個具體接收者都必須完成的命令
*/public abstract class receiver
public class concretereceiver1 extends receiver
}public class concretereceiver2 extends receiver
}
public abstract class command
public class concretecommand1 extends command
//必須實現乙個命令
public void execute()
}public class concretecommand2 extends command
//必須實現乙個命令
public void execute()
}
public class invoker
//執行命令
public void action()
}
public class client
}
命令模式的優缺點
優點類間解耦 :呼叫者角色與接收者之間沒有任何依賴關係
可擴充套件性
缺點當命令增加,導致命令類過多,臃腫
設計模式(二) 原型設計模式
官方定義 使用原型例項指定建立物件的種類,並通過複製這個原型建立新的物件 通俗的講就是根據乙個原型建立乙個新的物件 建立的方式實質就是拷貝原型自己 而且不需要知道新物件建立的細節 1 某些物件組合起來特別複雜,而重新建立費時又費力,此時通過拷貝能達到其目的 通過 說明問題 1 定義乙個協議 impo...
設計模式 二
php物件導向設計模式中,工廠模式,從字面中就能夠以理解為,工廠模式就是在不改變原來 的結構的基礎上,依據需求的新增類定義去完畢 php header content type text html charset utf8 php設計模式 二 工廠模式 定義介面db類 inte ce db clas...
設計模式(二)
工廠模式 factory 允許你在 執行時例項化物件。它之所以被稱為工廠模式是因為它負責 生產 物件。工廠方法的引數是 你要生成的物件對應的類名稱。抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化所有相對應的子類class exampl...