91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

設計模式之迭代器模式 引導篇

發布時間:2020-07-23 12:55:13 來源:網絡 閱讀:332 作者:凱哥Java 欄目:編程語言

迭代器模式-引導篇

設計模式之迭代器模式 引導篇

這兩天,比較火的并購新聞就是,網易考拉被阿里以20億美元收購。從此網易考拉不再姓“網”而姓“阿”了。并購后的網易考拉和阿里的電商系統進行對接。那么問題來了:在阿里有個早餐店的菜單(CakeHouseMenu)使用的事ArrayList來存放菜單的,考拉有個午餐店的菜單(DinerMenu)使用的是數組結構存放的。現在考拉和阿里合并了,兩個點的菜單也要合并。

設計模式之迭代器模式 引導篇

我們先來看看第一版設計:

因為馬爸爸說了,國慶之前,必須合并上線,時間緊任務中,腫么辦?那就再創建一個對象,使用一個菜單對象,將早餐店對象機午餐店對象作為屬性,調用的時候,直接調用各自對象的就可以。類圖如下:

設計模式之迭代器模式 引導篇

顧客來了,點早餐,服務器就從菜單中調用早餐店的get方法。得到KFC早餐套餐

如果點的是午餐,就從菜單中調用午餐店的getMenuItem方法,得到快餐一份。

代碼如下:

設計模式之迭代器模式 引導篇

運行ConventionalMainTest運行結果:

設計模式之迭代器模式 引導篇

我們可以看到,早餐、午餐菜單也都打印出來了。正常啊,沒問題啊。

我們先來看看服務員(waitress)對象里面內容:

設計模式之迭代器模式 引導篇

從上圖中,我們可以看到在服務員對象中有早餐店對象、午餐店對象、list類型的items以及數組類型的items。從運行結果上來看,是沒有問題的。但是要是過了N+X天后,馬爸爸又玩起了收購腫么辦?假設收購的是X店。X店的菜單使用的是hashTable這種類型的。

難道,我們要在waitress中在添加X店對象同時添加hashTabel類型的items嗎?好,就算收購一個,添加一個可以。

那么如果收購了M+N個店。菜單數據類型使用了W種類型。難道,每次都修改waiters這個類嗎?

設計模式之迭代器模式 引導篇


這樣行是行,但是在后期維護、管理比較麻煩。而且還違背了開閉原則(對修改是封閉的,對擴展是開放的)。那么怎么辦呢?

來源:凱哥Java(kaigejava)。

凱哥個人博客:www.kaigejava.com

思考:

我們在開發的時候,針對接口開發,這樣耦合度也可以降低。我們假設兩個飯店的菜單都實現了一個接口。然后waiter對象只要擁有接口對象就可以。

封裝遍歷的頂級接口,迭代器類圖如下:

設計模式之迭代器模式 引導篇

我們用迭代器接口來修改菜單:

設計模式之迭代器模式 引導篇

說明:

CakeHouseIterator和DinerIterator兩個類是實現了Iterator接口的

修改兩個飯店獲取getIterator的方法。返回對應放到實現iterator接口的對象。

我們來看早餐店的iterator對象:

設計模式之迭代器模式 引導篇

在重寫hasNext機next方法。

我們在來看看修改后的服務員對象:

設計模式之迭代器模式 引導篇

這個時候,服務員對象只有iterator對象了。已經實現了對早餐店及午餐店的解耦。

再來看看測試類:

設計模式之迭代器模式 引導篇

在服務員對象添加菜單的時候,是不知道具體添加的是早餐店的菜單還是午餐店的菜單。實現了解耦。

這樣做的好處:

一:類之間實現了松耦合

二:就算考拉修改了菜單數據結構也不影響服務員的點餐。也是實現耦合的一種表現。

不寫了,太困了。已經7號凌晨一點多了。各位看官,今日太累了,寫不不好,在迭代器總結篇好好補上。

本文作者:凱哥Java(kaigejava)





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清远市| 镇沅| 义马市| 商都县| 芜湖县| 余姚市| 铁岭县| 贵州省| 德安县| 宁强县| 桦南县| 佛冈县| 普格县| 伊宁县| 鸡泽县| 横峰县| 陆丰市| 昌宁县| 和平区| 阿拉善盟| 应城市| 始兴县| 康乐县| 满洲里市| 望江县| 鄂伦春自治旗| 茌平县| 古蔺县| 夏津县| 平乡县| 华亭县| 额敏县| 崇左市| 启东市| 江达县| 京山县| 新河县| 宜城市| 淳化县| 新巴尔虎右旗| 古浪县|