工廠模式:
介紹:
工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程(new 關鍵字和具體的構造器)隱藏起來。用一個工廠方法來替代,對外提供的只是一個工廠方法,達到提高靈活性的目的。
優點:
1.隱藏了new關鍵字和構造器
2.降低了這個對象與別的類之間的耦合度,提高了程序的可擴展性。 原因:當子類被別的類替代,或者構造器的參數發生變化的時候,只需改動工廠方法內的new即可,改動量降到了最低,直接用new關鍵字的話,需要改動的地方就很多了
3.把對象的設計和實現分割開來,從而代碼擴展性強、靈活性高。
適用范圍:
1.在編碼時不能預見需要創建哪一個種類的實例。
2.一個類使用它的子類來創建對象。
3.開發人員不希望創建了那個類的實例以及如何創建實例的信息暴露給外部程序。
除了上面提到的例子,工廠模式的實現方式還允許有一些小小的變化,例如:
基類可以是一個抽象類,在這種情況下,工廠類必須返回一個非抽象類。
基類提供了一些缺省方法,只有當這些缺省方法不能滿足特殊需求的情況下才能在子類中重寫這些方法。
可以直接通過傳遞給工廠類的參數決定應該返回哪一個子類的實例。
結構:用一個方法來代替new關鍵字和構造器。
單例模式:
介紹:
1.聲明一個私有的,靜態的本類對象,但並不在聲明的時候就初始化,因此,它的值為null。
2.私有化構造器
3.對外提供一個全局的,共有的,靜態的,唯一的方法,用來獲得該實例,但注意的是:必須要手動保持線程同步(synchronized)
4.在該方法里,判斷對象是否為null,如果是null的話,表示這個類還沒有被實例化,就會初始化這個對象,再返回如果不是null的話,就直接返回。
優點:
整個系統中的所有的類共用一個實例化對象,這樣可以有效的節省資源。
適用特點:
它確保一個類在java虛擬機里只有一個實例,使一個類只有一個對象,整個系統共享這個對象。
結構:將構造變成私有的-->做一個靜態的生成對象的方法-->造一個靜態的存儲對象-->return 靜態的對象