所在項目:產(chǎn)品中心
功能點:數(shù)據(jù)校驗接口
該接口用于校驗產(chǎn)品中心的數(shù)據(jù)的正確性,根據(jù)數(shù)據(jù)類型校驗蚯撩,如果是數(shù)字類型的數(shù)據(jù)走數(shù)字類型的校驗方法在孝,如果是checkbox類型的數(shù)據(jù)走checkbox類型的數(shù)據(jù)校驗方法硕糊。
模式講解:
策略模式為了避免重復(fù)多重使用if-else語句,將每一個if塊作為一種策略對象入蛆。UML鍵下圖:
213204wlfs5l777x79flxo.png
策略模式包含四個角色:
(1) Strategy工廠,用于生產(chǎn)具體的Strategy
public class StrategyFactory {
private static StrategyFactory factory = newStrategyFactory();
private static Map<String,Object> strategyMap = newConcurrentHashMap<>();
private StrategyFactory(){
}
static{
//文本框硕勿、密碼
strategyMap.put(ParamTypeEnum.TEXT.getName(), newTextCheckStrategy());
//數(shù)字框
strategyMap.put(ParamTypeEnum.NUMBER.getName(), newNumberCheckStrategy());
//范圍
strategyMap.put(ParamTypeEnum.RANGE.getName(), newRangeCheckStrategy());
//內(nèi)聯(lián)復(fù)選框
strategyMap.put(ParamTypeEnum.CHECKBOX.getName(), newCheckBoxCheckStrategy());
}
public Strategycreator(String type){
return (Strategy) strategyMap.get(type);
}
public staticStrategyFactory getInstance(){
return factory;
}
}
(2) 抽象策略角色
public interface Strategy {
/**
*數(shù)據(jù)校驗
*dbvalue:為數(shù)據(jù)庫中的字段
*paramValue:接口傳遞的參數(shù)
*
*@param dbvalue
*@param paramValue
*
*/
public StringcheckData(Object paramValue, String dbValue);
}
(3)具體策略角色哨毁,相當(dāng)于if塊
public class NumberCheckStrategy implementsStrategy{}
public class CheckBoxCheckStrategy implementsStrategy {}
客戶端調(diào)用為:
NumberCheckStrategynumberStrategy= (NumberCheckStrategy) StrategyFactory.getInstance().creator(itemType);
ret = numberStrategy.checkData(paramValue, dbValue);
CheckBoxCheckStrategycheckBoxStrategy= (CheckBoxCheckStrategy)StrategyFactory.getInstance().creator(itemType);
ret = checkBoxStrategy.checkData(paramValue, dbValue);
優(yōu)點:可以擴展任意類型的數(shù)據(jù)校驗,例如添加radio源武,text等類型的數(shù)據(jù)校驗扼褪。
缺點:1.客戶端必須要知道所有的策略,2.策略很多的話會有很多策略對象