策略模式前言咱們在這裡不重複了,大家可以看我上上篇文章 策略模式之簡單形式,上篇文章通過註解的形式解決型別分發,這次我們通過工廠模式,閒話少說,直接上**
我們先建乙個介面stockoperate類
public inte***ce stockoperate
因為利用到到裡模版形式,所以建立乙個抽象類basestockoperate,實現上述的介面
public abstract class basestockoperate implements stockoperate catch (exception e) finally
if (locationlock.isheldbycurrentthread())
}return true;
}}
我們先建立乙個工廠方法,用於儲存每個型別的實現類stockoperatestrategyfactory,維護乙個map
public class stockoperatestrategyfactory
public static void register(integer operatetype, stockoperate operate)
}
實現類,我們還是寫乙個入庫上架 inboundstockoperate 繼承上述的抽象類,且實現initializingbean,用於向工廠類中註冊該實現類
@service
public class inboundstockoperate extends basestockoperate implements initializingbean
@override
public void afterpropertiesset()
接入方式
int stocktype = 2;
//從工廠類map物件中獲取
stockoperate stockoperate = stockoperatestrategyfactory.getstockoperatebytype(stocktype);
stockoperate.operate(wmsoperatestock);
總結:
1、這種方式也是對於**擴充套件性比較好,如果新增一種入庫型別,只需要繼承乙個類,實現乙個介面,注入該實現類即可
2、弊端是每次新增業務型別,都需要實現initializingbean介面,注入該型別,一種半自動化操作
3、呼叫方需要先從工廠類中獲取入庫型別對應的例項物件,然後在呼叫對應的方法
設計模式之簡單工廠模式,工廠模式,策略模式
簡單工廠模式 的最大優點是在工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態例項化相關類,去得到客戶想要的產品。但個人覺得簡單工廠模式的最大優點正是產生它最大缺點之處。因為它的工廠類違反了開放 封閉原則 類,模組,方法等對於擴充套件是開放的,對於更改是封閉的。每當新增乙個功能,我們就需要去修改它的...
工廠模式與策略模式之區別
設計模式有很多種,其中功能相似的很多,但是為什麼還要分這麼多種名字,查閱資料,我覺得下面的解釋最為合理 用途不一樣,名字就有區別,一把斧頭用來砍人就叫凶器,用來砍柴就叫伐木斧,用來劈門就叫消防斧,這些模式的名字都是根據具體使用時的場景,聯絡了現實裡某樣東西或某種習慣而取得,所以很相似的模式行為有不同...
工廠模式 策略模式
目前遇到這樣乙個場景,就是會根據前端不同的傳值執行對應的方法策略。按照正常思路,需要在 中使用if判斷前端的值來執行不同的方法。但這樣做的缺點是會造成大量if判斷,且下次新增加乙個值對應乙個策略,那麼就需要改動 對於這種根據值來執行不同策略的場景,可以使用工廠模式 策略模式來解決。既然有策略,那麼我...