工廠模式與抽象工廠在實際專案中的應用
阿新 • • 發佈:2019-01-31
在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多型別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始設定;
比如在我的一個報表系統中,有一種報表生成事件,該事件實現run介面,實現具體的報表生成操作,但是它不能被new出來,因為它需要依賴spring的依賴注入的各種service物件. 所以這時就需要工廠模式
類圖:
抽象的基礎報表匯出事件
其中的一個子類:
工廠類:
生產報表事件:
ReportEvent reportEvent將事件放到佇列裡= ReportEventFactory.getInstance().createEvent(DhOrderReportEvent.class,parameter);
boolean add = TaskQueueUtil.reportQueue.add(reportEvent);取出報表事件,執行操作
ReportEvent reportEvent = TaskQueueUtil.reportQueue.poll(); if (reportEvent!=null) { threadPoolTaskExecutor.execute(reportEvent);}
工廠模式解決的問題:將同一類的物件的建立收整合一個工廠類,通過引數來區分實際生產的物件,其實,工廠模式是面向介面程式設計的一種實現.
還有一種例子是java的jdbc實現,操作資料庫的統一介面,再有一個工廠類,由工廠類的引數來決定生產的物件是面向mysql的還是oracle的.
案例:報表系統的報表事件,cxf客戶端,java的jdbc實現.
cxf客戶端:由工廠來統一生產各介面的具體實現,具體實現很複雜,封裝起來.
抽象工廠方法 其實是 工廠方法的一種升級. 應用於更復雜的業務場景.