項(xiàng)目開(kāi)發(fā)過(guò)程中眷细,有時(shí)經(jīng)常需要根據(jù)不同的條件做不同的事情,于是
if else
代碼到處都是普舆,本文就來(lái)講講如何優(yōu)雅干掉難纏的if else
先來(lái)看看使用 if else
的情況
- 以支付為例校读,代碼如下
@Service
public class PayService {
/**
* 支付
*
* @param orderInfo
* @param payType
* @return
*/
public boolean pay(Object orderInfo, Integer payType) {
if (payType == 1) {
System.out.println("微信支付");
} else if (payType == 2) {
System.out.println("支付寶支付");
} else if (payType == 3) {
System.out.println("信用卡支付");
}
return true;
}
}
- 選擇不同的支付方式,進(jìn)行不同的支付處理歉秫,當(dāng)再接入其他的支付方式,還要在代碼里面增加判斷雁芙,代碼耦合性很高
下面對(duì)上面代碼進(jìn)行改造,如下
- 對(duì)支付抽象一個(gè)接口
PayManager
public interface PayManager {
/**
* 支付處理
*
* @param orderInfo
* @return
*/
boolean pay(Object orderInfo);
}
- 微信支付谎碍,支付寶支付裂明,銀行卡支付等均實(shí)現(xiàn)該接口,做相應(yīng)的邏輯處理
// 微信支付邏輯處理類
@Component("payManager1")
public class WeixinPayManager implements PayManager {
@Override
public boolean pay(Object orderInfo) {
System.out.println("微信支付");
return false;
}
}
// 支付寶支付邏輯處理類
@Component("payManager2")
public class AliPayManager implements PayManager {
@Override
public boolean pay(Object orderInfo) {
System.out.println("支付寶支付");
return false;
}
}
// 銀行卡支付邏輯處理類
@Component("payManager3")
public class BankCardPayManager implements PayManager {
@Override
public boolean pay(Object orderInfo) {
System.out.println("銀行卡支付");
return false;
}
}
- 改造
PayService
類
@Service
public class PayService {
@Autowired
private Map<String, PayManager> payManagerMap;
/**
* 支付
*
* @param orderInfo
* @param payType
* @return
*/
public boolean pay(Object orderInfo, Integer payType) {
PayManager payManager = payManagerMap.get("payManager" + payType);
payManager.pay(orderInfo);
return true;
}
}
- 總結(jié)
- 改造后扳碍,
PayService
中代碼邏輯清晰仙蛉,沒(méi)有繁瑣的if else
,以后再接入一種支付方式荠瘪,只需要新增一個(gè)類,并實(shí)現(xiàn)PapManager
接口即可哀墓,其他代碼無(wú)需修改,符合“開(kāi)閉原則” - 對(duì)于
PayService
通過(guò)直接注入private Map<String, PayManager> payManagerMap
后雷,可能有些小伙伴比較陌生,其實(shí)這里Spring
會(huì)查找所有PayManager
類型的Bean
實(shí)例臀突,并注入到這個(gè)Map里面 - 可能有的覺(jué)得,每種支付方式候学,都要?jiǎng)?chuàng)建一個(gè)類梳码,會(huì)造成類越來(lái)越多,實(shí)際開(kāi)發(fā)過(guò)程中翎承,每種支付方式處理,可能涉及邏輯很多,分成不同的類處理比較瘩例,當(dāng)然也可根據(jù)實(shí)際情況抽象公共的代碼,本文不再講述
- 這里直接使用
payManager1焰坪、payManager2聘惦、payManager3
某饰,不太雅觀善绎,小伙伴可通過(guò)枚舉映射一下,本文不再講述
- 改造后扳碍,
- 本文完炬守,希望對(duì)你有幫助