Skip to content

Commit 7b9108d

Browse files
committed
抽象工程模式在迭代器中的应用
1 parent 2e69331 commit 7b9108d

File tree

7 files changed

+94
-0
lines changed

7 files changed

+94
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.anxpp.designpattern.abstractfactory.iterator;
2+
//抽象产品
3+
public interface IIterator<T> {
4+
boolean hasNext();
5+
Object next();
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.anxpp.designpattern.abstractfactory.iterator;
2+
import java.util.Collection;
3+
import java.util.Map;
4+
//抽象工厂
5+
public interface IIteratorFactory<T> {
6+
IIterator<T> iteratorMap(Map<T,Object> m);
7+
IIterator<T> iteratorCollection(Collection<T> c);
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.anxpp.designpattern.abstractfactory.iterator;
2+
import java.util.Collection;
3+
import java.util.Iterator;
4+
//具体产品,Collection迭代器(用到了代理模式)
5+
public class IteratorCollection<T> implements IIterator<T>{
6+
Iterator<T> iterator;
7+
public IteratorCollection(Collection<T> c){
8+
iterator = c.iterator();
9+
}
10+
@Override
11+
public boolean hasNext() {
12+
return iterator.hasNext();
13+
}
14+
@Override
15+
public T next() {
16+
return iterator.next();
17+
}
18+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.anxpp.designpattern.abstractfactory.iterator;
2+
import java.util.Collection;
3+
import java.util.Map;
4+
//具体工厂
5+
public class IteratorFactory<T> implements IIteratorFactory<T>{
6+
@Override
7+
public IteratorMap<T> iteratorMap(Map<T,Object> m) {
8+
return new IteratorMap<T>(m);
9+
}
10+
@Override
11+
public IteratorCollection<T> iteratorCollection(Collection<T> c) {
12+
return new IteratorCollection<T>(c);
13+
}
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.anxpp.designpattern.abstractfactory.iterator;
2+
import java.util.Iterator;
3+
import java.util.Map;
4+
//具体产品,Map迭代器(用到了代理模式)
5+
public class IteratorMap<T> implements IIterator<T>{
6+
Iterator<Map.Entry<T, Object>> iterator;
7+
public IteratorMap(Map<T,Object> m){
8+
iterator = m.entrySet().iterator();
9+
}
10+
@Override
11+
public boolean hasNext() {
12+
return iterator.hasNext();
13+
}
14+
@Override
15+
public Object next() {
16+
return iterator.next().getValue();
17+
}
18+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.anxpp.designpattern.abstractfactory.iterator;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.LinkedHashMap;
6+
import java.util.Map;
7+
//测试使用
8+
public class TestUse {
9+
public static void main(String args[]){
10+
IIteratorFactory<Integer> factory = new IteratorFactory<>();
11+
Collection<Integer> collection = new ArrayList<Integer>();
12+
Map<Integer, Object> map = new LinkedHashMap<>();
13+
for(int i=0;i<10;i++){
14+
collection.add(i);
15+
map.put(i, i);
16+
}
17+
IIterator<Integer> iteratorCollection = factory.iteratorCollection(collection);
18+
IIterator<Integer> iteratorMap = factory.iteratorMap(map);
19+
while(iteratorCollection.hasNext())
20+
System.out.print(iteratorCollection.next());
21+
System.out.println();
22+
while(iteratorMap.hasNext())
23+
System.out.print(iteratorMap.next());
24+
}
25+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* @author http://anxpp.com
3+
* 抽象工厂模式实现Collection和Map的迭代器
4+
*/
5+
package com.anxpp.designpattern.abstractfactory.iterator;

0 commit comments

Comments
 (0)