Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代器设计模式?_Java_Design Patterns_Iterator - Fatal编程技术网

Java 迭代器设计模式?

Java 迭代器设计模式?,java,design-patterns,iterator,Java,Design Patterns,Iterator,为清晰起见进行了编辑 我在看一组关于使用Java来演示各种模式使用的设计模式的教程视频,但是当我看到名为“迭代器设计模式”的视频时,它似乎只是使用了一个标准的Java迭代器。我以前在Java中使用过迭代器,但从来没有人把它们作为“设计模式”教给我。在Java中使用迭代器和使用“迭代器设计模式”有什么区别吗?如果是这样的话,区别是什么?这个问题非常笼统,几乎没有什么背景,但他们可能理解的是:使用迭代器(对底层数据有句柄并且可以以某种方式在序列中移动的东西)和使用索引之间有区别(告诉你序列中有多少个

为清晰起见进行了编辑


我在看一组关于使用Java来演示各种模式使用的设计模式的教程视频,但是当我看到名为“迭代器设计模式”的视频时,它似乎只是使用了一个标准的Java迭代器。我以前在Java中使用过迭代器,但从来没有人把它们作为“设计模式”教给我。在Java中使用迭代器和使用“迭代器设计模式”有什么区别吗?如果是这样的话,区别是什么?

这个问题非常笼统,几乎没有什么背景,但他们可能理解的是:使用迭代器(对底层数据有句柄并且可以以某种方式在序列中移动的东西)和使用索引之间有区别(告诉你序列中有多少个步骤)遍历类似序列的东西。

这个问题非常笼统,几乎没有上下文,但他们可能理解的是:使用迭代器和(对底层数据有句柄的东西,可以以某种方式在序列中移动)并使用索引(告诉您在序列中有多少步)遍历序列,如。

@Kvass通过标记编程语言,您可以澄清问题。 如果迭代器是一个接口,并且教程在这个接口上表示,那么就可以了

但有些参考资料对此略作提及。(检查C#中的IEnumerable或Java的Iterable通用接口告诉了我们更多信息。使用它们可以,但不能清楚地告诉我们发生了什么。我们应该了解此接口的过程,以涵盖迭代器设计模式)

如果您需要用于迭代器的资源,那么遍历的数据在这里是一个索引属性


它可以是哈希列表或其他东西。关键是获取一个抽象迭代器接口,该接口具有类似于first、next、last和currentItem的属性。通过CreateIterator或GetEnumerator等方法。

@k瓦斯通过标记编程语言,您可以澄清问题。 如果迭代器是一个接口,并且教程在这个接口上表示,那么就可以了

但有些参考资料对此略作提及。(检查C#中的IEnumerable或Java的Iterable通用接口告诉了我们更多信息。使用它们可以,但不能清楚地告诉我们发生了什么。我们应该了解此接口的过程,以涵盖迭代器设计模式)

如果您需要用于迭代器的资源,那么遍历的数据在这里是一个索引属性


它可以是散列列表或其他内容。重点是获取一个抽象迭代器接口,该接口具有类似于first、next、last和currentItem的属性。通过CreateIterator或GetEnumerator等方法。

您在Java中使用的迭代器实际上实现了。它们实现:

提供一种顺序访问聚合对象元素的方法,而不公开其底层表示

正如您在Java中的文档中所看到的,您知道的大多数容器都提供了一个迭代器对象,用于:

按顺序访问它们的元素,而不公开它们的底层表示


您在Java中使用的迭代器实际上实现了

提供一种顺序访问聚合对象元素的方法,而不公开其底层表示

正如您在Java中的文档中所看到的,您知道的大多数容器都提供了一个迭代器对象,用于:

按顺序访问它们的元素,而不公开它们的底层表示


我能想到的最好的方法是使用迭代器模式为自定义集合创建自定义迭代器

在下面的示例中,我创建了自定义集合和自定义迭代器,它们将按降序进行迭代

注意-这可以在Collections.reverseOrder()中完成。为了便于说明,我采用了这一点

package com.designpattern.behavioural.iteratorpattern;

/*
 * Java Iterator Pattern
 * Iterator Pattern allows to access the elements in an Object in a sequential manner rather than exposing the internal logic 
 * Use Case - Traverse on  different way based on the requirement
 */

/*
 * Iterator interface
 */
interface Iterator {

    public boolean hasNext();
    public Object next();

}

/*
 * Repository interface
 */
interface MyCollection {

    public Iterator getIterator();

}

/*
 * Repository and iterator implementation
 * Customized iteration - Iterate in reverse order
 */
class MyCustomCollection implements MyCollection {

    RepositoryIterator iterator = null;

    @Override
    public Iterator getIterator() {
        iterator = new RepositoryIterator();
        return iterator;
    }

    private class RepositoryIterator implements Iterator {

        String[] elements = {"1","2","3","4","5","6","7","8"};

        int index = 0;

        @Override
        public boolean hasNext() {
            if (index < elements.length) {

                return true;
            }
            return false;
        }

        @Override
        public Object next() {
            if (this.hasNext()) {
                index += 1;
                return elements[elements.length-index];

            }
            return null;
        }

    }

}

public class IteratorPattern {

    public static void main(String[] args) {

        MyCollection myCollection = new MyCustomCollection();

        for (Iterator iterator = myCollection.getIterator() ; iterator.hasNext();) {
            System.out.println(iterator.next());
        }

    }

}
package com.designpattern.behavior.iteratorpattern;
/*
*Java迭代器模式
*迭代器模式允许以顺序方式访问对象中的元素,而不是公开内部逻辑
*用例-根据需求以不同的方式遍历
*/
/*
*迭代器接口
*/
接口迭代器{
公共布尔hasNext();
公共对象next();
}
/*
*存储库接口
*/
界面菌落{
公共迭代器getIterator();
}
/*
*存储库和迭代器实现
*自定义迭代-按相反顺序迭代
*/
类MyCustomCollection实现MyCollection{
RepositoryIterator迭代器=null;
@凌驾
公共迭代器getIterator(){
迭代器=新的RepositoryIterator();
返回迭代器;
}
私有类RepositoryIterator实现迭代器{
字符串[]元素={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”};
int指数=0;
@凌驾
公共布尔hasNext(){
if(索引<元素长度){
返回true;
}
返回false;
}
@凌驾
公共对象下一个(){
if(this.hasNext()){
指数+=1;
返回元素[元素.长度索引];
}
返回null;
}
}
}
公共类迭代器模式{
公共静态void main(字符串[]args){
MyCollection MyCollection=新建MyCustomCollection();
for(Iterator Iterator=myCollection.getIterator();Iterator.hasNext();){
System.out.println(iterator.next());
}
}
}
输出:

八, 7. 6. 5. 4. 3. 2.
1

我能想到的最好方法是使用迭代器模式为自定义集合创建自定义迭代器

在下面的示例中,我创建了自定义集合和自定义迭代器,它们将按降序进行迭代

注意-这可以在Collections.reverseOrder()中完成。我只做了一个示例