1. 作用
比如List的iterator,可以迭代获取存放的对象,一般存放的时候可以直接用List。
但是如果需要进行特殊定制化处理,我们可以参考迭代器模式进行设计
2. 代码
2.1 迭代器对象
package com.hz.design.iterator;
/**
* @fileName: BusinessIterator
* @version:
* @description:
* @author: pp_lan
* @date: 2022/3/29
*/
public interface BusinessIterator<T> {
boolean hasNext();
T next();
}
package com.hz.design.iterator;
/**
* @fileName: Container
* @version:
* @description:
* @author: pp_lan
* @date: 2022/3/29
*/
public interface Container {
BusinessIterator iterator();
}
package com.hz.design.iterator;
import com.hz.model.CommonException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @fileName: UserStore
* @version:
* @description:
* @author: pp_lan
* @date: 2022/3/29
*/
public class UserStore implements Container {
private final List<User> userList;
public UserStore(User... users) {
this.userList = new ArrayList<>(Arrays.asList(users));
}
public void addUser(User user) {
this.userList.add(user);
}
@Override
public BusinessIterator iterator() {
return new UserIterator();
}
static class User {
private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "IteratorUser{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
class UserIterator implements BusinessIterator<User> {
private int count = 0;
@Override
public boolean hasNext() {
return count < userList.size();
}
@Override
public User next() {
if (count < userList.size()) {
User user = userList.get(count++);
// 模拟比较特殊的业务
if (user.getAge() == null) {
System.out.format("%s年龄缺失,查询其年龄.\n", user.getName());
user.setAge(20);
}
return user;
}
throw new CommonException("超出大小,无法获取");
}
}
}
2.2 测试类(调用)
package com.hz.design.iterator;
/**
* @fileName: IteratorTest
* @version:
* @description:
* @author: pp_lan
* @date: 2022/3/29
*/
public class IteratorTest {
public static void main(String[] args) {
UserStore userStore = new UserStore(new UserStore.User("王丽", 29), new UserStore.User("李丹丹", null), new UserStore.User("藏兵", 32));
userStore.addUser(new UserStore.User("王珊珊", null));
for(BusinessIterator<UserStore.User> it = userStore.iterator(); it.hasNext();) {
UserStore.User user = it.next();
System.out.println(user);
}
}
}
3. 执行结果
Connected to the target VM, address: '127.0.0.1:60166', transport: 'socket'
IteratorUser{name='王丽', age='29'}
李丹丹年龄缺失,查询其年龄.
IteratorUser{name='李丹丹', age='20'}
IteratorUser{name='藏兵', age='32'}
王珊珊年龄缺失,查询其年龄.
IteratorUser{name='王珊珊', age='20'}
Disconnected from the target VM, address: '127.0.0.1:60166', transport: 'socket'

被折叠的 条评论
为什么被折叠?



