簡單工廠設計模式在項目中應用
項目使用場景:根據不同的廠家,有不同的報表打印形式,而對於報表的打印他們有公共的部分,打印報表頭、打印底部、和打印中間部分。
我們可以使用簡單工廠模式,抽象出打印報表的接口,不同的廠家實現不同的打印接口。
單例模式在項目中應用
場景1:在DOM讀取配置文件的時候,因為經常被用到這個類,我們可以設置一個全局類,不用每次都new那麼多的類,節省資源消耗。
場景2:在spring的IOC依賴注入的時候,默認的是采用單例模式,例如controller層中一個類通過注入方式使用service層的一個類,而service這個類是全局變量,spring就是通過單例模式來實現的,當然我們可以通過配置spring的springMVC.xml文件來修改(prototype)。
單例模式作用:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
如下圖所示:
/**
* @ClassName: Singleton_Simple
* @Description: 單例模式——餓漢模式
* @author summer
* @date 2015-7-14
*
*/
public class Singleton_Simple {
private static final Singleton_Simple simple = new Singleton_Simple();
private Singleton_Simple(){}
public static Singleton_Simple getInstance(){
return simple;
}
}
當然對於讀取配置文件這個類我們可以作為靜態類來寫,那為什麼還要使用單例模式呢?spring工廠中創建的bean為singleton模式和prototype格式,為什麼沒有使用靜態類的形式?或者可以選擇非靜態類的靜態方法?
1、靜態類是在JVM加載的時候就占用內存的,而單例模式,可以在使用的時候再進行加載。也就是單例可以延遲初始化。
2、單例可以繼承類,可以實現接口,而靜態類不能。
3、單例類可以被集成,他的方法可以被覆寫。
4、單例類可以被用來多台。
5、而針對非靜態類的靜態方法,如果一個類不需要擴展的話可以用這樣的方式,用單例也可以,但是需要擴展的類,最好是使用單例。
代理模式在項目中的應用
應用場景:spring AOP的核心就是代理,通過代理模式的實現來實現解耦。
代理模式(proxy):為其他對象提供一種代理以控制對這個對象的訪問。
JDK代理模式如下所示:
外觀模式在項目中的應用
應用場景:在界面和業務邏輯層中抽取出一層,controller層調用facade層,facade層調用service層。
外觀模式(facade):為子系統中一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。