반복자 패턴 : (13)에 설명 된 자바 디자인 패턴

이 문서 자료 : GitHub의이 · 여기를 클릭 || GitEE · 여기를 클릭하십시오

첫째, 반복자 패턴

1, 기본 개념

커서 모드로 알려진 반복자 패턴은 객체의 동작입니다. 반복자 패턴 요소 순차적 집합체의 내부를 노출 할 필요없이 클러스터 모양으로 액세스 될 수있다.

2 패턴을 도시

3, 핵심 역할

  • 반복자 : 반복자 역할

요구의 역할이 추상 정의는 인터페이스 요소를 통과.

  • ConcreteIterator : 콘크리트 반복자 역할

이 역할은 반복자 인터페이스를 구현하고, 커서 위치 반복적 인 프로세스를 유지한다.

  • 집계 : 집계 역할

이 역할은 추상적 인 반복자 (반복자) 객체의 인터페이스를 만들 주어진다.

  • ConcreteAggregate : 특정 역할을 수집

중합 방법은 반복자 정확하게 세트를 통과 할 수 리턴으로서, 오브젝트의 컬렉션을 보유하고있다.

  • 클라이언트 : 클라이언트 역할

수집하고 반복자 객체 참조를 유지하기 위해, 인터페이스 반복자 반복자 객체를 호출합니다.

(4) 소스 케이스

public class C02_Iterator {
    public static void main(String[] args) {
        Object[] objArray = {"one","two","three","four","five"};
        Aggregate aggregate = new ConcreteAggregate(objArray);
        Iterator iterator = aggregate.createIterator();
        while (!iterator.isEnd()){
            System.out.println(iterator.currentItem());
            iterator.next();
        }
    }
}
interface Iterator {
    void first();
    void next();
    boolean isEnd();
    Object currentItem();
}
class ConcreteIterator implements Iterator{
    //持有被迭代的聚合对象
    private ConcreteAggregate agg;
    //记录当前迭代索引位置
    private int index = 0;
    //设置当前聚集对象的大小
    private int size = 0;
    public ConcreteIterator (ConcreteAggregate agg){
        this.agg = agg;
        this.size = agg.getSize();
        index = 0;
    }
    @Override
    public void first() {
        index = 0;
    }
    @Override
    public void next() {
        if (index<size){
            index++;
        }
    }
    @Override
    public boolean isEnd() {
        return (index>=size);
    }
    @Override
    public Object currentItem() {
        return agg.getElement(index);
    }
}
abstract class Aggregate {
    // 创建相应迭代器对象的接口
    public abstract Iterator createIterator();
}
class ConcreteAggregate extends Aggregate{
    private Object[] objArray = null;
    public ConcreteAggregate (Object[] objArray){
        this.objArray = objArray;
    }
    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(this);
    }
    public Object getElement (int index){
        if (index<objArray.length){
            return objArray[index];
        } else {
            return null;
        }
    }
    public int getSize (){
        return objArray.length;
    }
}

두, JDK 수집 응용 프로그램

1 간단한 케이스

public class C02_ArrayList {
    public static void main(String[] args) {
        List<String> stringList = new ArrayList<>() ;
        stringList.add("One") ;
        stringList.add("Two") ;
        stringList.add("Three") ;
        java.util.Iterator<String> itr = stringList.iterator() ;
        while (itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}

2, 반복자 소스

이는 수집 반복 방법을 제공한다.

public interface Iterator<E> {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

3 원의 ArrayList

  • 집계 인터페이스 목록을 달성
ArrayList<E> extends AbstractList<E> implements List<E>
  • 내부 반복자 인터페이스
private class Itr implements Iterator<E> {
    int cursor;
    int lastRet = -1;
    int expectedModCount = modCount;
    Itr() {}
    public boolean hasNext() {}
    public E next() {}
    public void remove() {}
    public void forEachRemaining(Consumer<? super E> consumer) {}
    final void checkForComodification() {}
}
  • 반복자를 반환
public Iterator<E> iterator() {
    return new Itr();
}

셋째, 반복자 요약

1 응용 시나리오

반복자 패턴이 바인딩 세트, 그냥 컬렉션을 사용, 당신은 수집, 목록, 설정에서 데이터 수집, 자바 컨테이너 개체,지도 자신의 반복자를 가지고를 통과하기 위해,이 컬렉션을 통해 같은 시간을 반복해야합니다. 그래서 기본 컨테이너 반복자의 실현에 매우 핵심 프로그래밍 언어로 컨테이너 객체는 개발의 요구를 충족하기 위해 일치하는, 그래서 장면은 상대적으로 작은 사용자 정의 연습 반복자입니다.

도 2에서, 이점을 요약

순회의 단순화 된 세트를 각각 집계 객체가 하나 이상의 반복자 객체를 가질 수있다, 각 반복 반복기의 상태는 서로 독립적 일 수있다. 순회 알고리즘 반복자 역할 내부에 캡슐화되어 있으므로 반복 알고리즘이 집합의 역할 변화에 독립적 일 수있다.

넷째, 소스 주소

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

추천

출처www.cnblogs.com/cicada-smile/p/11570299.html