Singleton模式 單例模式,也交單子模式,有時候系統只需要擁有一個全局對象。 這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。 一個類的返回對象一個引用(並且還是同一個)和一個獲得該實 ...
Singleton模式
單例模式,也交單子模式,有時候系統只需要擁有一個全局對象。
這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。
一個類的返回對象一個引用(並且還是同一個)和一個獲得該實例的方法(通常是getInstance)
如果調用這個方法為空的話,就創建一個實例;如果調用這個方法不為空的話,就返回這個引用。
public class SingleObject {
//創建 SingleObject 的一個對象
private static SingleObject instance = new SingleObject();
//讓構造函數為 private,這樣該類就不會被實例化
private SingleObject(){}
//獲取唯一可用的對象
public static SingleObject getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}
public class SingletonPatternDemo {
public static void main(String[] args) {
//不合法的構造函數
//編譯時錯誤:構造函數 SingleObject() 是不可見的
//SingleObject object = new SingleObject();
//獲取唯一可用的對象
SingleObject object = SingleObject.getInstance();
//顯示消息
object.showMessage();
}
}
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
instance就是一個靜態對象,在全局是唯一的,在記憶體空間上是固定的。
A,靜態對象的數據在全局是唯一的,一改都改。如果你想要處理的東西是整個程式中唯一的,弄成靜態是個好方法。 非靜態的東西你修改以後只是修改了他自己的數據,但是不會影響其他同類對象的數據。
B,引用方便。直接用 類名.靜態方法名 或者 類名.靜態變數名就可引用並且直接可以修改其屬性值,不用get和set方法。
C,保持數據的唯一性。此數據全局都是唯一的,修改他的任何一處地方,在程式所有使用到的地方都將會體現到這些數據的修改。有效減少多餘的浪費。
D,static final用來修飾成員變數和成員方法,可簡單理解為“全局常量”。對於變數,表示一旦給值就不可修改;對於方法,表示不可覆蓋。參考
Strategy 模式
在軟體開發中也常常遇到類似的情況,實現某一個功能有多種演算法或者策略,我們可以根據環境或者條件的不同選擇不同的演算法或者策略來完成該功能。
簡而言之,人說人話,鬼說鬼話。
如果我做A,就用A的相關演算法
如果我做B,就用B的相關演算法
EX:出行旅游
我們可以有幾個策略可以考慮:可以騎自行車,汽車,做火車,飛機。每個策略都可以得到相同的結果,但是它們使用了不同的資源。選擇策略的依據是費用,時間,使用工具還有每種方式的方便程度 。
Ex:排序策略
某系統提供了一個用於對數組數據進行操作的類,該類封裝了對數組的常見操作,
如查找數組元素、對數組元素進行排序等。現以排序操作為例,使用策略模式設計該數組操作類,
使得客戶端可以動態地更換排序演算法,可以根據需要選擇冒泡排序或選擇排序或插入排序,
也能夠靈活地增加新的排序演算法。
想要看到更多瑋哥的學習筆記、考試複習資料、面試準備資料?想要看到IBM工作時期的技術積累和國外初創公司的經驗總結?
敬請關註: