前言
最近在大佬的帶領下做标簽系統。對于我這樣 設計真是一個很困難的事情,最難的設計被大佬搞定了。其中在設計使用條件時,針對不同的場景插叙條件、使用規則都不相同,同時需要通過使用規則擷取到滿足前端需求的足量标簽,也就是說,擷取到的标簽集合還需要周遊每一個标簽是否在該場景下可用。大佬的設計就采用了疊代器模式。
于是,我在網上看到這樣一個語句片段“疊代器模式(Iterator Pattern)是 Java 和 .Net 程式設計環境中非常常用的設計模式”。直到這個時候我才由衷的知道自己多菜,同時心底裡膜拜了一下我的大佬。
概述
疊代器模式(Iterator Pattern)屬于行為模式。提供一種方法順序通路一個聚合對象中的各個元素,而又不暴露其内部的表示。
把遊走的任務放在疊代器上,而不是聚合上。這樣簡化了聚合的接口和實作,也讓責任各得其所。
涉及的設計原則
單一責任:一個類應該隻有一個引起變化的原因。類的每個責任都有改變的錢在區域。超過一個責任,就意味着超過一個改變的區域。
這個原則告訴我們,盡量讓每個類都保持單一責任。
内聚用來度量一個類或子產品緊密地達到單一目的或者責任。内聚是一個比單一責任原則更普遍概念。遵守單一責任的類容易具有很高的凝聚力,而且比背負很多責任的低内聚類容易維護。
類圖
抽象疊代器(Iterator):所有疊代器都需要實作的接口,提供了遊走聚合對象元素之間的方法。**
具體疊代器(ConcreteIterator): 利用這個具體的疊代器能夠對具體的聚合對象進行周遊。每一個聚合對象都應該對應一個具體的疊代器。
抽象聚合類(Aggregate)
具體聚合類(ConcreteAggregate:):實作creatIterator()方法,傳回該聚合對象的疊代器。
設計模式的實作
使用場景
如前言,在标簽系統的使用規則中,針對不同的場景,查詢條件不一樣,同時也要需要做标簽的過濾。
代碼實作
不做過多表述,貼出一張修改後的類圖。
總結
疊代器将周遊的工作封裝進一個對象中;
當使用疊代器的時候,我們依賴聚合提供周遊。
疊代器提供了一個通用的接口,讓我們周遊聚合的項,當我們編碼使用聚合的項時,就可以使用多多态機制了。