PHP의 반복자는 무엇입니까?

ringa_lee
풀어 주다: 2023-03-15 12:18:01
원래의
4665명이 탐색했습니다.

Iterator 패턴이란 무엇입니까

Definition: 객체의 내부 표시를 노출하지 않고 집계 객체의 각 요소에 순차적으로 액세스하는 방법을 제공합니다.

다음은 Iterator 패턴 구조 다이어그램입니다.

아래 샘플 코드를 간략하게 살펴보세요.

    //抽象聚合类
    abstract class Aggregate
    { 
        public abstract Iterator CreateIterator();
    }    
    //具体聚合类
    class ConcreteAggregate : Aggregate
    {        
        private IList<object> items = new List<object>();        
        public override Iterator CreateIterator()
            {            
                return new ConcreteIterator(this);
            }        
        public int Count
        {            
            get { 
            return items.Count; 
            }
        }        
        public object this[int index]
        {            
            get { return items[index]; }            
            set { items.Insert(index, value); }
        }
    }    
    //抽象迭代器类
    abstract class Iterator
    {        
        public abstract object First();        
        public abstract object Next();        
      public abstract bool IsDone();        
      public abstract object CurrentItem();
    }     
    //具体迭代器类
    class ConcreteIterator : Iterator
    {        
        private ConcreteAggregate aggregate;        
        private int Current = 0;        
        public ConcreteIterator(ConcreteAggregate aggregate)
        {            
        this.aggregate = aggregate;
        }        
        public override object CurrentItem()
        {            
            return aggregate[Current];
        }        
        public override object First()
        {            
            return aggregate[0];
        }        
        public override bool IsDone()
        {            
            return Current >= aggregate.Count ? true : false;
        }        
        public override object Next()
        {            
                object ret = null;
            Current++;            
            if(Current<aggregate.Count)
            {
                ret = aggregate[Current];
            }            
            return ret;
        }
    }     
    static void Main(string[] args)
        {
            ConcreteAggregate aggregate = new ConcreteAggregate();
            aggregate[0] = "michael";
            aggregate[1] = "jarle";
            aggregate[2] = "cumming";
            aggregate[3] = "andy";
            ConcreteIterator iterator = new ConcreteIterator(aggregate);
            iterator.First();            while (!iterator.IsDone())
            {
                Console.WriteLine($"{iterator.CurrentItem()},请打卡后再下班");
                iterator.Next();
            }
            Console.Read();
        }
로그인 후 복사

Analytic: 컬렉션 개체와 컬렉션 개체에 대한 작업을 함께 배치하면 컬렉션 개체의 요소를 다른 방식으로 순회하고 싶을 때 생각해 보세요. , 수정이 필요합니다. 컬렉션 객체는 "단일 책임 원칙"을 위반하는 반면, 반복자 패턴은 데이터 구조와 데이터 구조의 알고리즘을 분리하여 둘을 독립적으로 개발할 수 있습니다.

장점:

1. 다양한 탐색 방법을 지원합니다. 예를 들어, 순서가 지정된 목록에서는 필요에 따라 정방향 순회 및 역순 순회를 위한 두 개의 반복자를 제공합니다. 사용자는 컬렉션에 대해 순회 작업을 수행하기 위해 반복자를 가져오기만 하면 됩니다

2. 단순화된 집계 클래스입니다. 반복자의 도입으로 인해 원본 컬렉션 객체는 컬렉션 요소를 스스로 탐색할 필요가 없습니다

3. 새로운 집계 클래스와 반복자 클래스를 추가하는 것이 매우 편리하며 두 차원을 독립적으로 변경할 수 있습니다

4. 서로 다른 컬렉션의 경우 구조는 서로 다른 컬렉션 구조에서 작동하는 동일한 알고리즘을 지원하는 통합 인터페이스를 제공합니다.

1. 반복자 패턴은 데이터 저장과 데이터 탐색의 책임을 분리합니다. 해당 Iterator 클래스를 추가해야 하면 클래스 수가 쌍으로 증가하여 시스템 복잡성이 어느 정도 증가합니다

사용 시나리오:

1 내부 디스플레이를 노출하지 않고 집계 개체의 콘텐츠에 액세스합니다

2. . Aggregation 객체는 다양한 순회 방법을 제공해야 합니다

3. 다양한 집계 구조를 순회하기 위한 통합 인터페이스를 제공합니다

위 내용은 PHP의 반복자는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿