Spring IOC和工廠模式聯合使用簡化工廠模式

2021-08-25 16:07:58 字數 2539 閱讀 9703

目錄:

1:應用場景

2:傳統工廠模式

3:傳統工廠模式實現1中應用場景的弊端

4:ioc和工廠模式連合使用實現1中描述的場景

1:應用場景

在mypm的工作流業務中,有三種業務對像可以走工作流,分別為:文件,專案和工作任務;這三種業務對像在走工作流時,具體處理業務是有差別的,工作流引擎要根據不同的業務對像(文件,專案和工作任務),呼叫不同的處理器.

2:傳統工廠模式

(1)簡單工廠模式

用法:客戶端利用******factory產生乙個具體產品(用abstractproduct引用),當然這需要客戶端傳參,但判斷邏輯位於******factory中(如switch語句)。

擴充套件:若需要增加具體產品e,則須新增concreteproducte類,同時修改******factory。

修改:若需要修改具體產品a,則只需修改concreteproducta類。

(2)工廠方法模式

用法:客戶端根據需要的產品選擇工廠(例項化具體工廠a,用abstractfactory引用),再用該工廠製造產品(用abstractproduct引用)。

擴充套件:若需要增加具體產品e,則須新增concreteproducte類和concretefactorye。

修改:直接修改相應產品。

(3)抽象方法模式

用法:客戶端根據需要的產品選擇工廠(例項化具體工廠a,用abstractfactory引用),再用該工廠製造產品(用abstractproduct引用)。相比而言,抽象工廠模式的好處是易於轉換產品的系列(如由a系列轉換為b系列)。

擴充套件:若需要增加產品3a和3b,則除了要增加3個類外還要修改factorya和factoryb。若需要增加產品系列c,除了增加相應的類外,還要增加factoryc類。

修改:直接修改相應的類。

3:傳統工廠模式實現1中應用場景的弊端

應用場景

在mypm的工作流業務中,有三種業務對像可以走工作流,分別為:文件,專案和工作任務;這三種業務對像在走工作流時,具體處理業務是有差別的,工作流引擎要根據不同的業務對像(文件,專案和工作任務),呼叫不同的處理器.

在1中所描述場景,用簡單工廠模式實現**中會有很多if else 或是switch語句;用工廠方法模式或抽象方法模式實現時,會增加類。且看下面ioc和工廠模式連合使用後三種工廠模式(簡單工廠模式、工廠方法模式、 抽象方法模式)合併成簡單工廠模式使用且**中無任何if else 或是switch語句

4:ioc和工廠模式連合使用業實現1中描述的場景

思路其實很簡單:

在工廠中持有一map(通過ioc注入),key 為簡單工廠中要傳入的引數,value為實現了處理器介面   workflowtaskhandler的具體實現。取出具體的「產品」,即場景中的處理器

在工作流引擎中中呼叫方式如下

//gethanerbytask 方法中傳入要處理的工作流任務型別

workflowtaskhandler handler = taskhandle***ctory.gethanerbytask(dto.gettask().gettasktype());

//handlewftask為處理器介面workflowtaskhandler中定義的介面

handler.handlewftask(dto);

下面請看具體實現

4.1 先看ioc配置,如下圖所示taskhandle***ctory中持有workflowhanderhold,workflowhanderhold就是乙個map

workflowhanderhold中注入了 三個處理器,如有必要還可以繼續注入實現了workflowtaskhandler介面的任意類

4.2 工廠類,所下兩圖所示,taskhandle***ctoryimpl的實現中,**少之又少

簡單工廠模式和工廠模式

在對比兩種模式之前,首先需要學習 開放 封閉原則。在以前學習的過程中,聽說過很多次,編寫程式要遵循開閉原則。在做專案的過程中,因為需求的新增,經常會更新軟體。更新軟體,就要設計到修改 了。在物件導向的程式設計中,經常會寫類。如果因為新增需求,去修改已經完成的類。那麼他是不符合開閉原則的。新增需求,應...

工廠模式和抽象工廠模式

當client不知道要建立哪乙個具體類的例項,或者不想在client 中指明要具體建立的例項 換句話說就是計畫在不同條件下建立不同的例項。在這種情況下,適合使用個工廠模式。工廠模式可以視作是乙個虛擬的構造器,主要思路是定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲...

簡單工廠和工廠模式

工廠模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。適用性當乙個類不知道它所必須建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是...