没有IF-ELSE的工厂
面向?qū)ο笳Z言具有非常強大的多態(tài)性功能,用于刪除代碼中的if / else或切換大小寫。
沒有條件的代碼易于閱讀。 在某些地方必須放置它們,其中一個示例是Factory / ServiceProvider類。
我敢肯定,您已經(jīng)看到IF-ELSEIF的工廠課程了,而且規(guī)模還在不斷擴大。
在此博客中,我將分享一些技巧,您可以使用這些技巧來消除工廠課堂上的情況。
我將使用以下代碼段作為示例:
反射
這是您要刪除條件時想到的第一件事。 您會感到框架開發(fā)人員的感覺!
public static Validator newInstance(String validatorClass) {return Class.forName(validatorClass).newInstance(); }這看起來很簡單,但唯一的問題是調(diào)用者必須記住完全限定的類名,并且有時可能會出現(xiàn)問題。
地圖
映射可用于將實際的類實例映射到一些用戶友好的名稱:
Map<String, Validator> validators = new HashMap<String,Validator>(){{put("INT",new IntValidator());put("LOOKUPVALUE",new LookupValueValidator());put("DATE",new DateValidator());put("STRINGPATTERN",new StringPatternValidator());}};public Validator newInstance(String validatorType) {return validators.get(validatorType);}這看起來也很整潔,沒有反射的開銷。
枚舉
這很有趣:
enum ValidatorType {INT {public Validator create() {return new IntValidator();}},LOOKUPVALUE {public Validator create() {return new LookupValueValidator();}},DATE {public Validator create() {return new DateValidator();}};public Validator create() {return null;}}public Validator newInstance(ValidatorType validatorType) {return validatorType.create();}此方法使用enum方法刪除條件,問題之一是每種類型都需要Enum。 您不想創(chuàng)建大量的文件!
我個人喜歡這種方法。
結論
如果使用else或switch大小寫會使代碼難以理解,則應盡量避免使用它們。 應該使用語言構造來避免某些切換情況。
我們應該嘗試在沒有IF-ELSE的情況下進行編碼,這將迫使我們提出更好的解決方案。
翻譯自: https://www.javacodegeeks.com/2014/10/factory-without-if-else.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的没有IF-ELSE的工厂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 财付通为什么会自动扣费?
- 下一篇: 为什么NULL是错误的?