中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間: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

合山市| 桂平市| 满洲里市| 安宁市| 北川| 东源县| 淮北市| 安平县| 沙雅县| 大化| 邢台县| 松阳县| 永仁县| 常德市| 乡城县| 保山市| 方城县| 东方市| 宜阳县| 临海市| 通江县| 息烽县| 独山县| 仁寿县| 临颍县| 鄢陵县| 安远县| 郁南县| 长汀县| 无极县| 勃利县| 安新县| 宣城市| 民勤县| 峨眉山市| 宽甸| 慈溪市| 平遥县| 子长县| 调兵山市| 耒阳市|