設計模式之Singleton模式和Strategy模式是什麼
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工作時期的技術積累和國外初創公司的經驗總結?

敬請關注:
玮哥的部落格 —— CSDN的傳送門
玮哥的部落格 —— 簡書的傳送門
玮哥的部落格 —— 部落格園的傳送門