本文实例讲述了java基于迭代器模式实现的访问人员列表操作。分享给大家供大家参考,具体如下:
一 模式定义
迭代器模式,提供了一种模式顺序访问一个集合对象中各个元素的功能,而又不暴露其内部的表示。
二 模式举例
1 模式分析
我们借用访问人员列表这一案例来说明这一模式。
2 迭代器模式静态类图
3 代码示例
3.1 人员信息接口——iperson
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.demo.person;
/**
* 人员信息
*
* @author
*
*/
public interface iperson
{
/**
* 获得人员信息
*
* @return
*/
public string getpersoninfo();
}
|
3.2 人员信息实现——person
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package com.demo.person;
/**
* 人员具体实现类
*
* @author
*
*/
public class person implements iperson
{
// 姓名
private string name;
// 年龄
private int age;
// 性别(1:男性 0:女性)
private int sex;
/**
* 构造方法设置属性内容
*
* @param name
* @param age
* @param sex
*/
public person(string name, int age, int sex)
{
this .name = name;
this .age = age;
this .sex = sex;
}
/**
* 获得人员信息
*
* @return
*/
public string getpersoninfo()
{
return "姓名:" + this .name + " - 年龄:" + this .age + " - 性别:" + ( this .sex == 1 ? "男" : ( this .sex == 0 ? "女" : "" ));
}
}
|
3.3 人员集合接口——ipersonlist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.demo.person;
import com.demo.iterator.iterator;
/**
* 人员接口
*
* @author
*
*/
public interface ipersonlist {
/**
* 获得内部存储人员信息内容
*
* @return
*/
public iperson[] getpersonlist();
/**
* 迭代器
*
* @return
*/
public iterator iterator();
}
|
3.4 人员集合实现——personlist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package com.demo.person;
import java.util.random;
import com.demo.iterator.arrpersoniterator;
import com.demo.iterator.iterator;
/**
* 人员列表信息
*
* @author
*
*/
public class personlist implements ipersonlist {
// 存储用户信息列表
private final iperson[] list = new iperson[ 10 ];
// 构造方法初始化人员信息
public personlist() {
random random = new random();
// 创建人员信息
for ( int i = 0 ; i < 10 ; i++) {
iperson person = new person( "人员" + i, random.nextint( 30 ), random
.nextint( 2 ));
list[i] = person;
// this.list.add(person);
}
}
/**
* 获得内部存储人员信息内容
*
* @return
*/
public iperson[] getpersonlist() {
return list;
}
/**
* 迭代器
*
* @return
*/
public iterator iterator() {
return new arrpersoniterator( this .list);
}
}
|
3.5 迭代器接口——iterator
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.demo.iterator;
/**
* 迭代器接口
*
* @author
*
*/
public interface iterator {
// 判断是否含有下一个届节点
public boolean hasnext();
// 获得下一个节点对象
public object next();
// 删除对象
public object remove();
}
|
3.6 迭代器实现——arrpersoniterator
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package com.demo.iterator;
import com.demo.person.iperson;
/**
* 数组迭代器实现
*
* @author
*
*/
public class arrpersoniterator implements iterator {
// 私有属性存储人员列表对象信息
private final iperson[] personlist;
// 存储位置信息 初始值为-1
private int index = - 1 ;
/**
* 构造方法将人员列表对象传入
*
* @param personlist
*/
public arrpersoniterator(iperson[] personlist) {
this .personlist = personlist;
}
// 判断是否含有下一个节点
public boolean hasnext() {
return ( this .personlist == null ? false
: (index < this .personlist.length - 1 ));
}
// 获得下一个节点对象
public object next() {
if ( this .personlist != null && (index < this .personlist.length - 1 )) {
// 获得人员列表对象中的人员信息
return this .personlist[++index];
}
return null ;
}
// 删除对象
public object remove() {
if ( this .personlist != null ) {
iperson person = this .personlist[index];
this .personlist[index] = null ;
return person;
}
return null ;
}
}
|
3.7 让迭代器遍历集合对象——client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package com.demo;
import com.demo.iterator.iterator;
import com.demo.person.iperson;
import com.demo.person.ipersonlist;
import com.demo.person.personlist;
public class client {
/**
* @param args
*/
public static void main(string[] args) {
// 创建人员列表对象
ipersonlist personlist = new personlist();
system.out.println( "----使用迭代器输出人员信息 start......" );
// 生成迭代器
iterator iterator = personlist.iterator();
// 循环迭代器 遍历每一个元素输出人员信息
while (iterator.hasnext()) {
// 获得人员对象实例
iperson person = (iperson) iterator.next();
if (person != null ) {
// 输出人员信息
system.out.println(person.getpersoninfo());
}
}
system.out.println( "----使用迭代器输出人员信息 end......" );
}
}
|
4 运行结果
----使用迭代器输出人员信息 start......
姓名:人员0 - 年龄:28 - 性别:女
姓名:人员1 - 年龄:25 - 性别:女
姓名:人员2 - 年龄:23 - 性别:女
姓名:人员3 - 年龄:18 - 性别:女
姓名:人员4 - 年龄:27 - 性别:女
姓名:人员5 - 年龄:28 - 性别:男
姓名:人员6 - 年龄:25 - 性别:女
姓名:人员7 - 年龄:23 - 性别:女
姓名:人员8 - 年龄:16 - 性别:男
姓名:人员9 - 年龄:12 - 性别:女
----使用迭代器输出人员信息 end......
三 该模式设计原则
1"开一闭"原则
2单一职责原则
四 使用场合
1访问一个集合对象的内容,而无须暴露它的内部表示。
2支持对集合对象的多种遍历方式。
3为遍历不同的集合对象结构提供一个统一的接口。
五 迭代器模式静态类图
希望本文所述对大家java程序设计有所帮助。
原文链接:https://blog.csdn.net/chengqiuming/article/details/70139386