Skip to content

Commit 5ae638d

Browse files
committed
完成 迭代器模式 Sample
1 parent 68bdcd9 commit 5ae638d

File tree

6 files changed

+222
-2
lines changed

6 files changed

+222
-2
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* MIT License
3+
* <p>
4+
* Copyright (c) 2017 James
5+
* <p>
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
* <p>
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
* <p>
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
import org.slf4j.Logger;
26+
import org.slf4j.LoggerFactory;
27+
28+
/**
29+
* Iterator
30+
*/
31+
public class Application {
32+
33+
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
34+
35+
public static void main(String[] args) {
36+
// 查找小说
37+
ItemIterator iterator = new BookShelfIterator(ItemType.FICTION, new BookShelf());
38+
LOGGER.info("正在查找小说类图书");
39+
while (iterator.hasNext()) {
40+
Item nextItem = iterator.next();
41+
LOGGER.info("找到了符合条件的图书,书名为:{}", nextItem.toString());
42+
}
43+
44+
// 查找IT
45+
ItemIterator iterator2 = new BookShelfIterator(ItemType.IT, new BookShelf());
46+
LOGGER.info("正在查找IT类图书");
47+
while (iterator2.hasNext()) {
48+
Item nextItem = iterator2.next();
49+
LOGGER.info("找到了符合条件的图书,书名为:{}", nextItem.toString());
50+
}
51+
52+
// 查找漫画
53+
ItemIterator iterator3 = new BookShelfIterator(ItemType.CARTOON, new BookShelf());
54+
LOGGER.info("正在查找漫画类图书");
55+
while (iterator3.hasNext()) {
56+
Item nextItem = iterator3.next();
57+
LOGGER.info("找到了符合条件的图书,书名为:{}", nextItem.toString());
58+
}
59+
}
60+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* MIT License
3+
* <p>
4+
* Copyright (c) 2017 James
5+
* <p>
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
* <p>
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
* <p>
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
import java.util.ArrayList;
26+
import java.util.List;
27+
28+
/**
29+
* 书架
30+
*/
31+
public class BookShelf {
32+
33+
private List<Item> items;
34+
35+
public BookShelf() {
36+
items = new ArrayList<>();
37+
items.add(new Item(ItemType.FICTION, "西游记"));
38+
items.add(new Item(ItemType.FICTION, "水浒传"));
39+
items.add(new Item(ItemType.FICTION, "三国演义"));
40+
items.add(new Item(ItemType.FICTION, "红楼梦"));
41+
items.add(new Item(ItemType.CARTOON, "阿衰"));
42+
items.add(new Item(ItemType.CARTOON, "七龙珠"));
43+
items.add(new Item(ItemType.CARTOON, "火影忍者"));
44+
items.add(new Item(ItemType.IT, "设计模式-可复用面向对象软件的基础"));
45+
items.add(new Item(ItemType.IT, "重构-改善既有代码的设计"));
46+
items.add(new Item(ItemType.IT, "Effective Java"));
47+
items.add(new Item(ItemType.IT, "Java编程思想"));
48+
}
49+
50+
public List<Item> getItemList() {
51+
List<Item> list = new ArrayList<>();
52+
list.addAll(items);
53+
return list;
54+
}
55+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* MIT License
3+
* <p>
4+
* Copyright (c) 2017 James
5+
* <p>
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
* <p>
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
* <p>
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
import java.util.List;
26+
27+
/**
28+
* 图书的迭代器
29+
*/
30+
public class BookShelfIterator implements ItemIterator {
31+
32+
private ItemType type;
33+
private BookShelf shelf;
34+
private int idx;
35+
36+
public BookShelfIterator(ItemType type, BookShelf shelf) {
37+
this.type = type;
38+
this.shelf = shelf;
39+
this.idx = -1;
40+
}
41+
42+
@Override
43+
public boolean hasNext() {
44+
return -1 != getNexIdx();
45+
}
46+
47+
@Override
48+
public Item next() {
49+
idx = getNexIdx();
50+
if (-1 != idx) {
51+
return shelf.getItemList().get(idx);
52+
}
53+
return null;
54+
}
55+
56+
private int getNexIdx() {
57+
List<Item> list = shelf.getItemList();
58+
int tempIdx = idx;
59+
boolean found = false;
60+
while (!found) {
61+
tempIdx++;
62+
if (tempIdx >= list.size()) {
63+
tempIdx = -1;
64+
break;
65+
}
66+
if (list.get(tempIdx).getType().equals(type)) {
67+
break;
68+
}
69+
}
70+
return tempIdx;
71+
}
72+
}

iterator/src/main/java/Item.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ public ItemType getType() {
4545

4646
@Override
4747
public String toString() {
48-
return super.toString();
48+
return name;
4949
}
5050
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* MIT License
3+
* <p>
4+
* Copyright (c) 2017 James
5+
* <p>
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
* <p>
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
* <p>
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
/**
26+
* 迭代器接口
27+
*/
28+
public interface ItemIterator {
29+
30+
boolean hasNext();
31+
32+
Item next();
33+
}

iterator/src/main/java/ItemType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@
2727
*/
2828
public enum ItemType {
2929

30-
ANY, VEHICLE, ANIMAL, FOOD;
30+
IT, FICTION, CARTOON
3131
}

0 commit comments

Comments
 (0)