專案中的if else太多了,該怎麼重構?

2021-10-01 22:47:24 字數 2055 閱讀 3057

if (msgtype = "文字")  else if(msgtype = "")  else

就是根據訊息的不同型別有不同的處理策略,每種訊息的處理策略**都很長,如果都放在這種if else**快中,**很難維護也很醜,所以我們一開始就用了策略模式來處理這種情況。

策略模式還挺簡單的,就是定義乙個介面,然後有多個實現類,每種實現類封裝了一種行為。然後根據條件的不同選擇不同的實現類。

實現過程

訊息物件,當然真實的物件沒有這麼簡單,省略了很多屬性

@data

@allargsconstructor

public class messageinfo

定義乙個訊息處理介面

public inte***ce messageservice

有2個訊息處理介面,分別處理不同的訊息

處理文字訊息

@service

@msgtypehandler(value = msg_type.text)

public class textmessageservice implements messageservice

}

處理訊息

@service

@msgtypehandler(value = msg_type.image)

public class imagemessageservice implements messageservice

}

文章寫到這,可能大多數人可能會想到要需要如下乙個map, map《訊息型別,訊息處理物件》,這樣直接根據訊息型別就能拿到訊息處理物件,呼叫訊息處理物件的方法即可。我們就是這樣做的,但是我們不想手動維護這個map物件,因為每次增加新的訊息處理類,map的初始化過程就得修改

定義乙個訊息型別的列舉類

public enum msg_type 

}

定義乙個註解

@documented

@inherited

@target(elementtype.type)

@retention(retentionpolicy.runtime)

public @inte***ce msgtypehandler

不知道你注意到了沒,前面的**中,每種訊息處理類上面都有乙個@msgtypehandler註解,表明了這個處理類

處理哪種型別的訊息

@service

@msgtypehandler(value = msg_type.text)

public class textmessageservice implements messageservice

}

用乙個context物件儲存了訊息型別->訊息處理物件的對映關係

@component

public class messageservicecontext

public void putmessageservice(integer code, messageservice messageservice)

}

最精彩的部分到了

@component

@override

beans.foreach((name, bean) -> );

}}

在spring的啟動過程中,通過解析註解,將訊息型別->訊息處理物件的對映關係儲存到messageservicecontext物件中

@autowired

messageservicecontext messageservicecontext;

@test

public void contextloads()

專案中的if else太多了,該怎麼重構?

if msgtype 文字 else if msgtype else if msgtype else 就是根據訊息的不同型別有不同的處理策略,每種訊息的處理策略 都很長,如果都放在這種if else 快中,很難維護也很醜,所以我們一開始就用了策略模式來處理這種情況。策略模式還挺簡單的,就是定義乙個介...

專案中的if else太多了,該怎麼重構?

策略模式還挺簡單的,就是定義乙個介面,然後有多個實現類,每種實現類封裝了一種行為。然後根據條件的不同選擇不同的實現類。實現過程 訊息物件,當然真實的物件沒有這麼簡單,省略了很多屬性 data allargsconstructor public class messageinfo 12 3456 78...

專案中的if else太多了,該怎麼重構?

if msgtype 文字 else if msgtype else就是根據訊息的不同型別有不同的處理策略,每種訊息的處理策略 都很長,如果都放在這種if else 快中,很難維護也很醜,所以我們一開始就用了策略模式來處理這種情況。策略模式還挺簡單的,就是定義乙個介面,然後有多個實現類,每種實現類封...