日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java 靜態工廠代替多參構造器的適用情況與優劣

瀏覽:12日期:2022-08-19 16:39:25
背景

假如現在你要想一個漢堡,有一個漢堡類:Hamburg。那么一般情況下你會:

Hamburg hamburg = new Hamburg();情景一:不同參數數目的構造器

制作漢堡可以選擇自定義,加肉,加菜,或者不添加,直接默認配方即可,那么會有以下幾個構造器:

Hamburg();Hamburg(Meat meat);Hamburg(Meat meat,Vegetable vegetable);

當你要制作漢堡的時候,看到這么多的構造器,但是卻不知道他們是什么意思,返回的漢堡到底有什么區別?查文檔又有點麻煩,有沒有更好的解決方法呢?

情景二:不同種類的漢堡

如果有多種漢堡:新奧爾良漢堡,麥辣香漢堡。常規的做法就是:繼承漢堡類,實現子類,如:

class xinaoerliangHamburg extends Hamburg{}class mailaHamburg extends Hamburg{}

但是會有問題:用戶在使用的時候,還得記住你那么多類名,那是不是很麻煩?如果后續有更多的口味,那是不是要記住更多地類去才能得到對應的實例呢?有沒有更好的解決方法?

情景三:自定義漢堡的做法

如果漢堡的手法讓你非常不滿意,你想要用達芬奇技法來制作漢堡,那么可以怎么做呢?常規的做法是:

class Hamburg{ ... //默認制作手法 private Maker mMaker = new DefaultMaker(); public Hamburg(Maker maker){ ... //使用傳進來的手法對象制作漢堡 mMaker = maker; ... }}

需要重新寫一個構造器,傳入參數來覆蓋原來的制作手法。這樣既有情景一的問題,還有另外的問題是:如果需要自定義的東西多的時候,那么Hamburg里需要維護的代碼就更加的復雜了。

什么是靜態工廠方法

以上情景問題可以通過靜態工廠方法來改善。

注意,這里的靜態工廠方法并不是設計模式中的工廠模式。這里只是使用靜態工廠方法來代替構造器實例化對象。

顧名思義,靜態工廠方法,就是使用靜態方法來構建類的實例,解決使用構造器實例化的各種問題。先看個例子,還是以上面的漢堡為例子,如果需要多種口味的漢堡,那么可以:

class Hamburg{ //獲取奧爾良口味的漢堡 public static Hamburg ofAoErLiang(){ return new AoErLiangHamburg(); } //獲取麥辣香味的漢堡 public static Hamburg ofMaiLaXiang(){ return new MaiLaXiangHamburg(); }}//兩種口味的漢堡,通過繼承漢堡實現class AoErLiangHamburg extends Hamburg{}class MaiLaXiangHamburg extends Hamburg{}

通過這種方法可以解決的是:用戶需要什么類型的漢堡,可以直接通過Hamburg的靜態方法來獲取,而無需知道他的子類名字是什么。而如果有更多種口味的漢堡,只需要擴展靜態方法即可;或者給靜態方法增加參數,通過switch來返回對應的口味漢堡。

靜態工廠優缺點

這里的話會結合上面舉的例子,如果忘記了,看到可以返回去看一下。

優點 解決構造器重載卻不知道各種構造器含義的問題。通過構造方法可以在方法名寫明,那么用戶只需要通過方法名就知道這個方法是返回什么對象。(例如情景一)例如:

//不同的靜態工廠方法返回不同的實例,通過方法名就知道他們的區別//ps:這是android的動畫類ObjectAnimator animator = ObjectAnimator.ofFloat();ObjectAnimator animator = ObjectAnimator.ofInt(); 可以通過根據用戶的參數或者調用不同的靜態工廠方法來返回具體的子類對象。當后期要更換方法接口返回的子類時,對于用戶來說也是透明的,用戶只是拿到一個父類引用的對象。可以參考上面我在介紹靜態工廠方法舉的例子。

Java 8以上,可以在接口中定義靜態工廠方法,這樣無需知道該接口有多少個實現類,只需要根據靜態方法來獲取接口對象即可。

重復利用對象,防止創建無用實例。這看起來很像單例,但是比單例要靈活得多。可以根據具體的情況,來判斷是否要緩存實例。 可以動態注冊代碼。我們可以通過一組用戶注冊api,讓用戶先把需要的自定義代碼注入,再調用靜態方法來獲取自己需要的對象類型。這樣的好處就是不會有一堆很復雜的構造器,內部邏輯也可以分離。對應情景三解決的問題缺點 如果該類不包含public或者protect構造器,那么將無法被子類實例化。因為我們想要用戶通過靜態方法來獲取對象,而不喜歡用戶通過構造方法來實例化對象。而如果把構造器設置為private,則無法被子類繼承。 無法在javadoc中直接查看文檔介紹,構造器是會直接生成doc的。但是直接通過方法名和參數名,已經可以看懂很多了。 靜態方法命名規范 方法名 含義 fromXxx 類型轉換 ofXxx 多個參數聚合 valueOf 和from of類似 getInstance 獲取一個實例,實例類型通過方法參數描述 getNewInstance/create 獲取一個新的實例 getType 主要用于工廠方法中獲取不同類的對象(屬于設計模式中的工廠方法) newType 新建一個對應類的對象(屬于設計模式中的工廠方法) type 上面兩者的簡化版 小結

在有多種子類或者重載構造器的時候,可以優先考慮一下靜態工廠方法,可以讓我們的代碼更加地優雅,也方便我們進行維護。另外這和設計模式中的工廠模式有區別,并不是一樣的,要進行區分。

參考資料

《effective java》

以上就是java 靜態工廠代替多參構造器的詳細內容,更多關于java 靜態工廠的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品7m凸凹视频分类| 欧美日韩xxxx| 鲁大师精品99久久久| 欧美日韩亚洲一区三区| 日韩中文字幕| 亚洲精品激情| 亚洲色图综合| 日本麻豆一区二区三区视频| 日韩精品亚洲专区在线观看| 九九综合九九| 尤物在线精品| 久久国产精品毛片| 亚洲免费资源| 国产精品a级| 黄毛片在线观看| 99久久婷婷| 羞羞答答国产精品www一本| 亚洲免费影院| 日韩高清一区在线| 精品国产乱码久久久| 亚洲影院天堂中文av色| 日韩不卡一区二区| 国产精品视频首页| 成人午夜毛片| 秋霞影视一区二区三区| 玖玖玖国产精品| 国产精品手机在线播放| 成人亚洲欧美| 亚洲丝袜美腿一区| av亚洲免费| 国产日韩中文在线中文字幕| 麻豆视频在线观看免费网站黄| 黄色成人91| 精品不卡一区| 亚洲精品美女91| 精品国产a一区二区三区v免费| 91精品精品| 久久一区视频| 视频精品一区| 日韩免费av| 欧美日韩网址| 美女精品在线观看| 桃色av一区二区| 国产欧美丝祙| 亚洲综合色婷婷在线观看| 国产成人调教视频在线观看| 日本中文字幕视频一区| 999久久久国产精品| 精品视频高潮| 欧美日韩在线精品一区二区三区激情综合 | 久久久国产精品网站| 婷婷综合激情| 91精品国产91久久久久久黑人| 麻豆国产欧美一区二区三区| 综合亚洲自拍| 日韩欧美激情| 97久久亚洲| 91亚洲无吗| 亚洲另类av| 蜜臀精品久久久久久蜜臀| 亚洲女同一区| 欧美精品黄色| 精品欧美激情在线观看| 久久久国产精品一区二区中文| 国产一区二区三区免费在线| 精品美女在线视频| 国产视频一区二| 国产毛片精品久久| 国产一区二区亚洲| а√天堂8资源中文在线| 三上悠亚国产精品一区二区三区 | 欧美91在线| 国产一区丝袜| 成人国产综合| 久久国产日本精品| 狠狠干综合网| 日韩精品国产欧美| 日本成人中文字幕| 国产精品网址| 伊人久久av| 午夜精品免费| 香蕉久久久久久| 国产精品成人自拍| 亚洲三级欧美| 亚洲免费专区| 91看片一区| 中文字幕一区二区三区日韩精品| 国产欧美三级| 亚洲婷婷免费| 国产探花一区| 欧美69视频| 日本久久二区| 超碰在线99| 免费人成精品欧美精品| 风间由美中文字幕在线看视频国产欧美 | 99久久99久久精品国产片果冰 | 日韩中文字幕麻豆| 精品精品99| 日本99精品| 国产99久久| 国产精品a级| 久久在线电影| 久久精品国产一区二区| 久久xxxx精品视频| 日韩免费高清| 国产精品综合色区在线观看| 91高清一区| 久久男人av资源站| 国产精品伊人| 亚洲精品麻豆| 亚洲欧美日韩国产一区| 久久永久免费| 日本少妇精品亚洲第一区| 亚洲色诱最新| 999久久久亚洲| 给我免费播放日韩视频| 亚洲一级大片| 日韩视频一区二区三区在线播放免费观看| 国产精品一页| 日本91福利区| 日韩欧美高清一区二区三区| 美女久久网站| 久久www成人_看片免费不卡| 欧美精选一区二区三区| 91精品国产福利在线观看麻豆| 日韩av片子| 国产日韩电影| 99国产精品免费视频观看| a日韩av网址| 日产精品一区| 欧美日韩精品在线一区| 久久久久免费| 激情不卡一区二区三区视频在线| 麻豆精品蜜桃视频网站| 国产精品日韩精品在线播放| 欧美一区久久| 久久精品国产亚洲一区二区三区| 国产欧美一区二区三区精品观看 | 蜜桃视频一区二区| 久久午夜精品| 亚洲精品亚洲人成在线观看| 亚洲精品国产精品粉嫩| 日韩国产欧美一区二区三区| 国产剧情在线观看一区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 日本欧美不卡| 国产一区91| 日韩亚洲精品在线观看| 日本精品在线播放| 精品一区不卡| 久久高清免费| 中文字幕一区二区精品区| 久久国产精品久久w女人spa| 亚州精品视频| 日韩av二区| 丝袜诱惑制服诱惑色一区在线观看 | 欧美一区免费| 久久久久久久久99精品大| 亚洲影视一区二区三区| 国产精品视频一区视频二区| 亚洲性视频h| 亚洲三级精品| www.九色在线| 欧美日本久久| 五月天综合网站| 久久亚洲资源中文字| 水野朝阳av一区二区三区| 美女尤物国产一区| 欧美综合二区| 少妇久久久久| 国产一区二区视频在线看| 蜜桃伊人久久| 午夜国产精品视频| 91日韩欧美| 国产日韩欧美一区二区三区 | 久久精品国产99| 视频国产精品| 玖玖玖国产精品| 国产一区日韩一区| 欧美激情麻豆| 日韩高清一区在线| 久久国产精品亚洲77777| 青青久久av| yellow在线观看网址| 国产一区 二区| 免费日韩av片| 国产亚洲精品自拍| 国产一区亚洲| 欧美aa一级| av中文资源在线资源免费观看| 日韩国产成人精品| 日韩av不卡在线观看| 日韩精品社区| 日本va欧美va欧美va精品| 中文字幕日韩亚洲| 一区二区电影在线观看| 老司机精品久久| 亚洲精品一级| 国产欧美在线观看免费| 日韩成人午夜精品|