重構 switch 使用 工廠 策略

2021-10-06 05:18:50 字數 1657 閱讀 1266

往常的**

switch (zeroorderrequest.getreceivetype())
聽架構師說這樣的** 一點不優雅 重構為 乙個工廠 + 列舉 + 策略實現

建立乙個 工廠

/**

* 伯樂操作運單工廠

*/@component

public class operationorde***ctory );}}

public operationorderservice getinstance(integer distype)

return handlemap.get(distype);

}}

建立乙個service

/**

* dongzhiwei

* 操作訂單服務 用來策略模式

*/public inte***ce operationorderservice

然後幾個實現這個服務 就可以了

/**

* 14 應付改單審單通過

*/@component

@slf4j

@resource

fengyuservice fengyuservice;

@resource

fyconfig fyconfig;

@override

public r operationordermethod(zeroorderrequest zeroorderrequest, orderzeroloadmodel orderzeroloadmodel, orderzeroloadmodel orderzeroloadmodeltemp) ,申請應付改單申請通過",zeroorderrequest.getzeroloadordernumber());

}@override

public operationorderenum gettype()

}

/**

* 15 應付改單審單拒絕

*/@component

@slf4j

@resource

orderzeroloaddao orderzeroloaddao;

@override

public r operationordermethod(zeroorderrequest zeroorderrequest, orderzeroloadmodel orderzeroloadmodel, orderzeroloadmodel orderzeroloadmodeltemp) ",zeroorderrequest.getzeroloadordernumber());

return r.ok();

}@override

public operationorderenum gettype()

}

呼叫就可以了

r r = operationorde***ctory.getinstance(zeroorderrequest.getreceivetype()).operationordermethod(zeroorderrequest, orderzeroloadmodel, orderzeroloadmodeltemp);

使用工廠方法替換switch語句

如果switch語句中的分支固定,且不可變 例如,星期中只有7天 不用使用工廠方法替換 如果分支不固定,或將來有可能改,可以採用工廠方法來替換switch語句,這樣就符合開發閉合原則。plandatatype 型別 package com.test.factory public inte ce pl...

簡單工廠模式重構Switch語句

最近看公司的 經常看到很多的switch語句,想到如果要加case改動比較大,也比較長,違反了開閉原則,所以想著用簡單工廠重構下,方便以後的擴充套件。private void dealmessage int type 1case push response 司機上傳位置報文 2 case uploa...

工廠 策略 》簡單使用

先看以下範例 public class promotions 不同的數字代表不同的打折方式 param num param totalprice return private static integer getprice int num,int totalprice return price pr...