23种设计模式:迭代器模式

迭代器模式

1.介绍

概念

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

迭代器模式属于行为型模式。

主要作用

提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。

解决的问题

不同的方式来遍历整个整合对象。

使用场景

1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。
(引用自菜鸟教程)

2.实现

背景

类UsernameList用来储存用户的姓名,利用迭代器模式创建一个迭代器类用来遍历UsernameList。

java实现

1.创建Iterator接口

public interface Iterator {
    public boolean hasNext();
    public Object next();
}

2.创建Container接口

public interface Container {
    public Iterator getIterator();
}

3.创建USernameList

public class UsernameList implements Container{
    private String[] usernames = {"zhangsan", "lisi", "wangwu"};
    @Override
    public Iterator getIterator() {
        return new UserIterator(usernames);
    }
}
  1. 创建UserIterator类
public class UserIterator implements Iterator{
    String[] usernames;
    int index;

    public UserIterator(String[] usernames) {
        this.usernames = usernames;
    }

    @Override
    public boolean hasNext() {
        if (index < usernames.length) {
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        if (index < usernames.length) {
            return usernames[index++];
        }
        return null;
    }
}

5.创建测试类

public class IteratorPatternDemo {
    public static void main(String[] args) {
        UsernameList usernameList = new UsernameList();
        Iterator iterator = usernameList.getIterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

6.运行结果

zhangsan
lisi
wangwu


golang实现

package IteratorPattern

// Iterator 创建Iterator接口
type Iterator interface {
	hasNext() bool
	next() interface{}
}

// Container 创建Container接口
type Container interface {
	getIterator() Iterator
}


// UserIterator 创建UserIterator
type UserIterator struct {
	usernames []string
	index int
}

func (u *UserIterator) hasNext() bool {
	if u.index < len(u.usernames) {
		return true
	}
	return false
}
func (u *UserIterator) next() interface{} {
	if u.index < len(u.usernames) {
		u.index++
		return u.usernames[u.index - 1]
	}
	return nil
}


// UsernameList 创建UsernameList
type UsernameList struct {
	usernames []string
}

func (u *UsernameList) getIterator() Iterator {
	return &UserIterator{
		usernames: u.usernames,
	}
}
func NewUsernameList(usernames []string) *UsernameList {
	return &UsernameList{
		usernames: usernames,
	}
}
package IteratorPattern

import (
	"fmt"
	"testing"
)

func TestIteratorPatternDemo(t *testing.T) {
	//str := []string{"123", "456"}

	usernameList := NewUsernameList([]string{"zhangsan", "lisi", "wangwu"})
	iterator := usernameList.getIterator()

	for iterator.hasNext() {
		fmt.Println(iterator.next())
	}
}
=== RUN   TestIteratorPatternDemo
zhangsan
lisi
wangwu
--- PASS: TestIteratorPatternDemo (0.00s)
PASS

其它设计模式

1.工厂模式

2.抽象工厂模式

3.外观模式

4.建造者模式

5.桥接模式

6.命令模式

7.迭代器模式

8.模板模式

9.访问者模式

10.备忘录模式

11.责任链模式

12.中介模式

13.原型模式

14.状态模式

15.策略模式

16.享元模式

17.组合模式

18.解释器模式

19.单例模式

20.适配器模式

21.代理模式

22.装饰器模式

23.观察者模式

posted @ 2021-09-25 12:22  Dawnlight-_-  阅读(37)  评论(0编辑  收藏  举报