通過策略模式 乾掉掉 if else

2021-09-26 09:39:39 字數 1560 閱讀 1658

如何替換掉,我們平常使用的 if...else,switch...case邏輯

整個流程 大概就是:專案啟動時,以@handlertype註解中的型別值作為key,註解修飾的 class 作為value,初始化到 map中,然後根據key動態取class。

懂了吧。

技術涉及:spring 鉤子 beanfactorypostprocessor

自定義註解(元註解)

利用策略模式,只需要兩行即可實現業務邏輯:

type:傳入值

a()方法:傳入值所對應的業務方法

ok,讓我們看看是咋實現的,首先定義了乙個handlerprocessor類,繼承了 beanfactorypostprocessor,然後

1、掃瞄指定包中標有@handlertype註解的類;

2、將@handlertype註解中的型別值作為key,對應的類作為value,儲存在map中;

3、以上面的map作為構造函式引數,初始化handlercontext,將其註冊到spring容器中

(beanfactorypostprocessor是針對整個容器的後置處理器,他被觸發時機是在ioc容器載入完各種配置後,還沒執行bean的初始化之前。)

ok, 再看看

abstracthandler instance = handlercontext.getinstance(type); 中 handlercontext.getinstance(type)幹了點啥:根據傳入的值,在map中獲取響應的 class(class:三個業務類),然後獲取對應的bean。

ok,最後instance.a();  就呼叫了,type值 所對應類中的業務邏輯方法,這就替代了 if(type == value)  。

ok,再看看abstracthandler裡面寫了啥:

ok,再看看具體的每個業務方法:

ok,這裡寫了三個業務處理方法,都繼承了abstracthandler 類;

ok,再看看 這個自定義註解是咋寫的

就是賦了個值。

策略模式 工廠模式優化if else

2.優化if else 思路描述 構建支付型別業務處理介面,不同的支付型別實現該介面並重寫介面方法實現支付型別的具體處理邏輯 構建支付型別工廠,根據對應支付型別獲取支付型別業務處理介面實現類.2.1構建支付型別介面 public inte ce paytypehandleservice2.2 根據不...

策略模式優化大量if else

在 編寫的個過程中難免會碰到使用到if else的情況,太多的if else會使 變的臃腫並且難以理解,然後想到了之前寫策略模式是可以對它進行優化的,的規範和易懂性我認為對乙個優秀程式設計師來說是必要的。平常經常碰到的 author cjd description 使用if.else臃腫的 retu...

使用策略模式消除if else

最近專案中遇到如下情況 有乙個操作叫平帳,然後要對多個不同的款項進行平帳,目測有72種。然後平帳的方法只有乙個,在那個平帳方法裡面,判斷是哪一種款項,然後不同的款項有不同的處理邏輯。if 款項a if 款項b if 款項c 這個就很可怕了。因此使用策略模式來消除掉if else。先看使用策略模式之後...