日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

没有IF-ELSE的工厂

發(fā)布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 没有IF-ELSE的工厂 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面向?qū)ο笳Z言具有非常強大的多態(tài)性功能,用于刪除代碼中的if / else或切換大小寫。

沒有條件的代碼易于閱讀。 在某些地方必須放置它們,其中一個示例是Factory / ServiceProvider類。

我敢肯定,您已經(jīng)看到IF-ELSEIF的工廠課程了,而且規(guī)模還在不斷擴大。

在此博客中,我將分享一些技巧,您可以使用這些技巧來消除工廠課堂上的情況。


我將使用以下代碼段作為示例:

public static Validator newInstance(String validatorType) {if ("INT".equals(validatorType))return new IntValidator();else if ("DATE".equals(validatorType))return new DateValidator();else if ("LOOKUPVALUE".equals(validatorType))return new LookupValueValidator();else if ("STRINGPATTERN".equals(validatorType))return new StringPatternValidator();return null;}

反射

這是您要刪除條件時想到的第一件事。 您會感到框架開發(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)建大量的文件!

我個人喜歡這種方法。

結(jié)論

如果使用else或switch大小寫會使代碼難以理解,則應盡量避免使用它們。 應該使用語言構(gòu)造來避免某些切換情況。

我們應該嘗試在沒有IF-ELSE的情況下進行編碼,這將迫使我們提出更好的解決方案。

翻譯自: https://www.javacodegeeks.com/2014/10/factory-without-if-else.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的没有IF-ELSE的工厂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。