【GOF23設計模式】迭代器模式

【GOF23設計模式】迭代器模式

來源:http://www.bjsxt.com/?
一、【GOF23設計模式】_迭代器模式、JDK內置迭代器、內部類迭代器

場景

結構

 1 package com.test.iterator;
 2 /**
 3  * 自定義的迭代器接口
 4  */
 5 public interface MyIterator {
 6     void first();   //將游標指向第一個元素    
 7     void next();    //將游標指向下一個元素
 8     boolean hasNext();  //判斷是否存在下一個元素
 9 
10     boolean isFirst();
11     boolean isLast();
12 
13     Object getCurrentObj(); //獲取當前游標指向的對象
14 }
 1 package com.test.iterator;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * 自定義的聚合類
 8  */
 9 public class ConcreteMyAggregate {
10     private List<Object> list = new ArrayList<Object>();
11 
12     public void addObject(Object obj){
13         this.list.add(obj);
14     }
15     public void removeObject(Object obj){
16         this.list.remove(obj);
17     }
18 
19     public List<Object> getList() {
20         return list;
21     }
22     public void setList(List<Object> list) {
23         this.list = list;
24     }
25 
26     //獲得迭代器
27     public MyIterator createIterator(){
28         return new ConcreteIterator();
29     }
30 
31     //使用內部類定義迭代器,可以直接使用外部類的屬性
32     private class ConcreteIterator implements MyIterator{
33 
34         private int cursor; //定義游標用于記錄遍歷時的位置
35 
36         @Override
37         public void first() {
38             cursor = 0;
39         }
40 
41         @Override
42         public void next() {
43             if(cursor<list.size()){
44                 cursor++;
45             }
46         }
47 
48         @Override
49         public boolean hasNext() {
50             if(cursor<list.size()){
51                 return true;
52             }
53             return false;
54         }
55 
56         @Override
57         public boolean isFirst() {
58             return cursor==0?true:false;
59         }
60 
61         @Override
62         public boolean isLast() {
63             return cursor==(list.size()-1)?true:false;
64         }
65 
66         @Override
67         public Object getCurrentObj() {
68             return list.get(cursor);
69         }
70     }
71 }
 1 package com.test.iterator;
 2 
 3 public class Client {
 4     public static void main(String[] args) {
 5         ConcreteMyAggregate cma = new ConcreteMyAggregate();
 6         cma.addObject("aa");
 7         cma.addObject("bb");
 8         cma.addObject("cc");
 9 
10         MyIterator iter = cma.createIterator();
11         while(iter.hasNext()){
12             System.out.println(iter.getCurrentObj());
13             iter.next();
14         }
15     }
16 }

基本案例

posted on 2016-08-24 13:41 ErBing 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/erbing/p/5802590.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457355.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQLServer 維護腳本分享(08)臨時數據庫(tempdb)

dbcc sqlperf(logspace) --各數據庫日志大小及使用百分比dbcc loginfo --查看當前數據庫的虛擬日志文件--臨時表Tempdb最近使用情況 SELECT t1.session_id ,t1.internal_objects_alloc_page_count*8.0/1024 as internal_objects_alloc_MB ,t1.internal_objects_dealloc_p…

51單片機50個實例代碼_【附代碼】51單片機電子密碼鎖教程

簡介大家好&#xff0c;這篇文章的內容是關于如何用51單片機來制作一個電子密碼鎖的教程&#xff0c;通過這篇教程可以讓剛入門的朋友了解矩陣鍵盤、LCD1602的使用方法&#xff0c;以及密碼輸入和修改的程序介紹&#xff0c;我會對每個部分進行詳細的介紹。首先我們來看一下這個…

旋轉的正方體

<!DOCTYPE html><html lang"zh-cmn-Hans"><head><meta charset"utf-8" /><title>backface-visibility_CSS參考手冊_web前端開發參考手冊系列</title><meta name"author" content"Joy Du(飄零霧雨),…

8數據提供什么掩膜產品_博碩能為你提供什么產品?

自動噴漆設備應用于線條、木門、櫥柜、樓梯、套房家具、辦公家具、木飾面板、外墻保溫裝飾一體板板等產品領域&#xff0c;針對NC、PU、UV、水性漆和氟碳漆等不同種類的油漆&#xff0c;進行自動化噴涂和干燥作業。自動噴漆設備有多種規格型號&#xff0c;分為不同的噴涂方式。…

python3 實現對比conf 文件差異

用法&#xff1a; ./conf.py nginx1.conf nginx2.conf > diff.htmlconf.py#!/usr/bin/python import difflib import sys #### Usage: compare_nginx.conf.py filename1 filename2 >diff.html try:textfile1 sys.argv[1]textfile2 sys.argv[2] except Exception as…

mysql----innodb統計信息

對innodb 統計信息的控制可以通過如下幾個常用的variables 來實現 1、innodb_stats_persistent&#xff1a; 這個參數控制著innodb的統計信息是否持久化到磁盤&#xff0c;先說明一下持久化到磁盤是什么意思&#xff1b;通常來說統計信息只保存在內存中&#xff0c;也就是說如果…

linux pid t 頭文件_linux系統調用相關頭文件

Linux C 一些函數 所屬的頭文件 2011-03-07 10:25:07分類&#xff1a; LINUX在編寫程序時&#xff0c;有時總是不記得所使用的函數在哪個庫函數中。現在先把自己以前經常用到的函數頭文件總結一下。 有不對的地方還請指教。1&#xff0c;系統調用 文件的操作函數#inlclude &…

jsp頁面驗證碼(完整實例)

項目結構如下&#xff0c;MyEclipse中新建一個Web Project&#xff0c;取名servlet 1、src下new一個servlet類 package com.servlet;import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOExcept…

開源oa_圈子哥推薦一款基于 Spring Boot 開發 OA 開源產品,學習/搞外快都是不二選擇!...

點擊上方藍字關注「程序員的技術圈子」今天圈子哥給大家推薦一套Spring Boot 開發 OA系統&#xff0c;系統功能齊全&#xff0c;不管是用來學習或者搞外快都是不錯的選擇&#xff0c;clone下來吧&#xff01;辦公自動化(OA)是面向組織的日常運作和管理&#xff0c;員工及管理者…

iOS網絡編程實踐--NSStream實現TCP Socket iPhone客戶端

客戶端我們使用iPhone應用程序&#xff0c;畫面比較簡單。點擊發送按鈕&#xff0c;給服務器發送一些字符串過去。點擊接收按鈕就會從服務器讀取一些字符串&#xff0c;并且顯示在畫面上。 有關客戶端應用的UI部分不再介紹了&#xff0c;我們直接看代碼部分&#xff0c;Socket客…

Mocha 和 Chai 入門初探

轉載自樓主個人博客 Mocha 和 Chai 入門初探Chai 在和 jest 作比較的時候, 兩者主要的不同就是 jest 的集成度比較高內置斷言庫, 而 mocha 需要搭配額外的斷言庫, 在此選擇了比較流行的 chai 作為斷言庫. 風格的選擇 其中 chai 又有好幾種斷言風格, 我們經常見到的其實就是 BDD…

ios把數據傳遞到另一個頁面_IOS 應用之間的跳轉和數據傳遞詳解

說明&#xff1a;本文介紹app如何打開另一個app,并且傳遞數據。一、簡單說明新建兩個應用&#xff0c;分別為應用A和應用B.實現要求:在appA的頁面中點擊對應的按鈕&#xff0c;能夠打開appB這個應用。1.新建兩個應用&#xff0c;分別為A和B.142354418874108[1].png150002248248…

Libevent初探

Libevent 是一個用C語言編寫的、輕量級的開源高性能網絡庫&#xff0c;主要有以下幾個亮點&#xff1a;事件驅動&#xff08; event-driven&#xff09;&#xff0c;高性能;輕量級&#xff0c;專注于網絡&#xff0c;不如 ACE 那么臃腫龐大&#xff1b;源代碼相當精煉、易讀&am…

ServerSocketChannel API用法

java.nio.channels 類 ServerSocketChannel java.lang.Objectjava.nio.channels.spi.AbstractInterruptibleChanneljava.nio.channels.SelectableChanneljava.nio.channels.spi.AbstractSelectableChanneljava.nio.channels.ServerSocketChannel所有已實現的接口&#xff1a; C…

jq分頁 不刷新頁面_jQuery無刷新分頁完整實例代碼

本文實例講述了jQuery無刷新分頁實現方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;這款jQuery分頁示例&#xff0c;是分頁經典形式&#xff0c;兼容性也做的好&#xff0c;網頁上的分頁代碼&#xff0c;分享給大家。運行效果截圖如下&#xff1a;在線演示地址如…

為什么要寫年終總結

2016只剩下不到百分之一的時間了&#xff0c;網上陸續看到各種企業或個人的總結或盤點&#xff0c;公司也必須規定每個員工要做年度工作總結&#xff0c;或許是環境釋然&#xff0c;心里也有無數次要做總結的念頭&#xff0c;尤其是月末年末這種感覺更重&#xff0c;但卻沒靜下…

特別慢_背什么都特別慢,該怎么提高記憶力?

考研是一項全方位的比拼&#xff0c;除了每天進行知識點的復習&#xff0c;還要做題、總結&#xff0c;最后還得進行背誦記憶&#xff0c;其實什么科目都需要背的&#xff0c;就算數學&#xff0c;該記的概念和公式也是要記憶的&#xff0c;因為會做題更快&#xff0c;提高效率…

tiny4412u-boot燒寫及根文件系統制作(不進入終端問題)

http://m.blog.csdn.net/article/details?id51400196&#xff08;轉&#xff09; VMware12 環境&#xff1a;ubuntu12.4 開發板&#xff1a;tiny4412 首先燒寫bootloader&#xff0c;我用一個8G的內存卡&#xff0c;現在不說sd卡的制作過程了&#xff0c;網上可以參考。 現在就…

第三章 中間件,3.1 萬億級數據洪峰下的分布式消息引擎(作者:馮嘉、誓嘉、塵央、牟羽)...

3.1 萬億級數據洪峰下的分布式消息引擎 前言 通過簡單回顧阿里中間件(Aliware)消息引擎的發展史&#xff0c;本文開篇于雙11消息引擎面臨的低延遲挑戰&#xff0c;通過經典的應用場景闡述可能會面臨的問題 - 響應慢&#xff0c;雪崩&#xff0c;用戶體驗差&#xff0c;繼而交易…

Linux目錄結構和常用命令

一、Linux目錄結構 你想知道為什么某些程序位于/bin下&#xff0c;或者/sbin&#xff0c;或者/usr/bin&#xff0c;或/usr/sbin目錄下嗎&#xff1f;例如&#xff0c;less命令位于/usr/bin目錄下。為什么沒在/bin中&#xff0c;或/sbin&#xff0c;或/usr/sbin目錄中&#xff1…